系列教程
- Spring 框架介紹
- Spring 框架模塊
- Spring開發環境搭建(Eclipse)
- 創建一個簡單的Spring應用
- Spring 控制反轉容器(Inversion of Control – IOC)
- 理解依賴注入(DI – Dependency Injection)
- Bean XML 配置(1)- 通過XML配置加載Bean
- Bean XML 配置(2)- Bean作用域與生命周期回調方法配置
- Bean XML 配置(3)- 依賴注入配置
- Bean XML 配置(4)- 自動裝配
- Bean 注解(Annotation)配置(1)- 通過注解加載Bean
- Bean 注解(Annotation)配置(2)- Bean作用域與生命周期回調方法配置
- Bean 注解(Annotation)配置(3)- 依賴注入配置
- Bean Java配置
- Spring 面向切面編程(AOP)
- Spring 事件(1)- 內置事件
- Spring 事件(2)- 自定義事件
1. 定義Bean
在xml配置文件中(如"beans.xml"),添加Bean定義:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 定義一個Bean -->
<bean id="..." class="...">
<!-- bean 配置 -->
</bean>
<!-- App bean -->
<bean id="app" class="App" lazy-init="true"></bean>
</beans>
可以給Bean設置一些屬性,此處用到的屬性說明:
- id: bean的唯一標識符
- class: 指定bean的Java類名稱
- lazy-init: 懶加載,讓Spring容器在Bean首次用到時創建Bean實例,而不是在應用一啟動就創建
2. 創建Spring容器
Spring容器負責加載bean配置文件、創建bean。
前面教程提到過有2種容器:
- ApplicationContext
- BeanFactory
ApplicationContext
基於BeanFactory
,比BeanFactory
功能更強,更常用。
BeanFactory 容器
BeanFactory容器是簡單的IOC容器,只提供基本的依賴注入支持。BeanFactory
本身是一個Java接口,最常見的實現是XmlBeanFactory
類。通常不直接使用BeanFactory容器,而是用ApplicationContext 容器。
ApplicationContext 容器
ApplicationContext容器是更高級更常用的容器,繼承並擴展了BeanFactory的功能。同樣ApplicationContext
本身是一個Java接口,常用的實現類是:
FileSystemXmlApplicationContext
: 通過文件路徑加載bean的xml配置文件ClassPathXmlApplicationContext
: 通過類路徑加載bean的xml配置文件WebXmlApplicationContext
: 通過web網址加載bean的xml配置文件
代碼示例:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
// ApplicationContext容器加載beans.xml
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
}
}
3. 通過Spring容器獲取bean
通過Spring容器可以訪問它所管理的任意Bean,可使用getBean()
方法返回Bean實例。
示例:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// 獲取Bean實例
App app = context.getBean("app", App.class);
// App app = (App) context.getBean("app");
}
}
4. 關閉容器
最后應用結束時需要關閉容器,釋放資源,容器中的所有bean也將被銷毀。
context.close();
// 如果當前context類沒有close方法,需類型轉換為有close方法的類,如下所示
// ((ClassPathXmlApplicationContext) context).close();
// ((ConfigurableApplicationContext) context).close();