1 裝配 Bean
- 方式(1)
beans.xml
<!-- 第一種方式,new 實現類-->
<bean id="userService" class="com.tzb.service.UserServiceImpl">
<!--依賴注入,調用 set 方法-->
<property name="name" value="李四"></property>
</bean>
@Test
public void test(){
ApplicationContext contex = new ClassPathXmlApplicationContext("beans3.xml");
IUserService user = (IUserService) contex.getBean("userService");
user.add();
}
- 方式(2)
UserServiceFactory1
package com.tzb.service;
public class UserServiceFactory1 {
public static IUserService createUserService(){
return new UserServiceImpl();
}
}
beans.xml
<!--方式二:靜態工廠方法-->
<bean id="userService2" class="com.tzb.service.UserServiceFactory1" factory-method="createUserService"></bean>
- 方式(3)
UserServiceFactory2
package com.tzb.service;
public class UserServiceFactory2 {
public IUserService createUserService() {
return new UserServiceImpl();
}
}
-bean.xml
<!--實例工廠方法-->
<bean id="factory" class="com.tzb.service.UserServiceFactory2"></bean>
<bean id ="userService" factory-bean="factory" factory-method="createUserService"></bean>
2 Bean 的作用域
- singleton ,在Spring IoC容器中僅存在一個Bean實例,Bean以單例方式存在,默認值
- prototype , 每次從容器中調用Bean時,都返回一個新的實例,即每次調用getBean()時 ,相當於執行new XxxBean()
- request , 每次HTTP請求都會創建一個新的Bean,該作用域僅適用於WebApplicationContext環境
- session , 同一個HTTP Session 共享一個Bean,不同Session使用不同Bean,僅適用於WebApplicationContext 環境
- globalSession ,一般用於Portlet應用環境,該作用域僅適用於WebApplicationContext 環境
beans.xml
<bean id="userService" class="com.tzb.service.UserServiceImpl" scope="prototype"></bean>
3 Bean 的生命週期
- instantiate bean對象實例化
- populate properties 封裝屬性
- 如果Bean實現BeanNameAware 執行 setBeanName
- 如果Bean實現BeanFactoryAware 執行setBeanFactory ,獲取Spring容器
- 如果存在類實現 BeanPostProcessor(後處理Bean) ,執行postProcessBeforeInitialization
- 如果Bean實現InitializingBean 執行 afterPropertiesSet
- 調用 指定初始化方法 init
- 如果存在類實現 BeanPostProcessor(處理Bean) ,執行postProcessAfterInitialization
執行業務處理 - 如果Bean實現 DisposableBean 執行 destroy
- 調用 指定銷燬方法 customerDestroy