理解Spring Bean生命週期

一、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的生命週期就更加全面了,具體流程如下

發佈了59 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章