一、Spring Bean的概念
Spring bean通常來說是指被Spring容器所管理的java對象;而spring容器就是負責實例化、配置和裝配Spring bean;
二、Spring Bean容器
Spring Bean容器可以獲取Spring Bean,通過BeanFacroty接口或ApplicationContext接口,兩者的區別在於Application繼承自BeanFacrory接口,所以Application包含了Beanfactory的所有功能以及拓展了更多功能,而且BeanFactory是懶加載的,ApplicationContext是預加載;
三、實例化SpringBean
Spring提供了三種初始化方式
1.實現InitializingBean接口
public interface InitializingBean{
void afterPropertiesSet() throws Exception;
}
2.@PostConstruct,通常將註解放在方法上
@PostConstrcut
public void init(){
System.out.println("init method...");
}
3.init-method
public class MyClass{
public void init(){
System.out.println("init method...");
}
}
@Configuration
public class AppConfig{
@Bean(initMethod="init")
public MyClass myclass(){
return new MyClass();
}
}
或者是這種xml配置
<bean id="myClass" class="com.demo.Myclass" init-method="init" />
這三種初始化方式在框架中組合使用,調用順序是@PostContruct會被最先調用,其次是InitializingBean.afterPropertiesSet()方法,最後是調用通過xml配置的init-method方法或者設置@Bean註解設置的initMethod方法;
而在實例化Spring Bean之前會有兩個回調方法,這個好理解,就好像頁面加載一樣,有生命週期函數,而這個生命週期函數的實現就是BeanPostProcessor接口,BeanPostProcessor有兩個方法,分別是postProcessorBeforeInitialization和postProcessorAfterInitialization;
所以到目前爲止,我們知道的Spring Bean的生命週期函數就是如下這種情況;
四、Spring Bean的銷燬
既然有創建就會有銷燬,否則就是濫用內存,當Spring移除bean時,相關回調方法如下;
我們知道初始化又@PostConsruct、InitializingBean.afeterPropertiesSet()、init-method三種方式,那麼對應這三種創建方式便會有三種對應的銷燬方式,具體如下;
1.DisposableBean
2.@PreDestory
3.destory-mthod
組合使用調用順序是@PreDestory、DisposabelBean.destory()、調用XML配置的destory-method方法或者是@Bean註解設置的餓destoryMethod屬性的方法
自此我們知道的Spring Bean的生命週期就更加全面了,具體流程如下