spring注解之Bean生命周期


1.什么是bean?

Spring Bean是被實例的,組裝的及被Spring 容器管理的Java對象。

Spring 容器會自動完成@bean對象的實例化。

創建應用對象之間的協作關系的行為稱為:裝配(wiring),這就是依賴注入的本質。

2.Bean生命周期幾種方式:

2.1通過@Bean注解指定初始化和銷毀方法

@Bean(initMethod = "init",destroyMethod = "destroy")

@Configuration
public class MyLifeCycleConfig {
    @Scope("prototype")
    @Bean(initMethod = "init",destroyMethod = "destroy")
    public Dog dog(){
        return  new Dog();
    }
}

applicationContext.close();關閉容器 
單實例: 調用close()關閉容器,則會調用銷毀方法
多實例: 調用close()關閉容器,則不會調用銷毀方法
 

  構造(對象創建)
          單實例:在容器啟動的時候創建對象
          多實例:在每次獲取的時候創建對象

  初始化:
          對象創建完成,並賦值好,調用初始化方法。。。

  銷毀:
          單實例:容器關閉的時候銷毀
          多實例:容器不會管理這個bean;容器不會調用銷毀方法;

 

2.2 實現初始化接口InitializingBean 和 銷毀接口DisposableBean

通過讓Bean實現InitializingBean(定義初始化邏輯);  DisposableBean(定義銷毀邏輯);

 

@Component
public class Cat implements InitializingBean, DisposableBean {
    public Cat(){
        System.out.println("cat...構造器...");
    }
    public void destroy() throws Exception {
        System.out.println("cat ....destroy....");
    }

    public void afterPropertiesSet() throws Exception {
        System.out.println("cat ...afterPropertiesSet....");
    }
}

 

2.3 使用JSR250 java中的注解

  •  @PostConstruct:在bean創建完成並且屬性賦值完成;來執行初始化方法
  •   @PreDestroy:在容器銷毀bean之前通知我們進行清理工作

 

@Component
public class Tiger {
    public Tiger(){
        System.out.println("tiger...constructor....");
    }
    @PostConstruct
    public void init(){
        System.out.println("tiger....@postConstruct...");
    }
    @PreDestroy
    public void destroy(){
        System.out.println("tiger....@PreDestroy.....");
    }
}

 

2.4 使用接口  BeanPostProcessor :bean的后置處理器;

 接口BeanPostProcessor是 在bean初始化前后進行一些處理工作;
 - postProcessBeforeInitialization:在初始化之前工作
 - postProcessAfterInitialization:在初始化之后工作

@Component
public class MyBeanPostProcessor implements BeanPostProcessor {

    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        // TODO Auto-generated method stub
        System.out.println("postProcessBeforeInitialization..."+beanName+"=>"+bean);
        return bean;
    }
    
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        // TODO Auto-generated method stub
        System.out.println("postProcessAfterInitialization..."+beanName+"=>"+bean);
        return bean;
    }
}

 

3.小結

 1)、指定初始化和銷毀方法;
         通過@Bean指定init-method和destroy-method;


 2)、通過讓Bean實現InitializingBean(定義初始化邏輯),
                 DisposableBean(定義銷毀邏輯);


 3)、可以使用JSR250;
         @PostConstruct:在bean創建完成並且屬性賦值完成;來執行初始化方法
         @PreDestroy:在容器銷毀bean之前通知我們進行清理工作


 4)、BeanPostProcessor【interface】:bean的后置處理器;
         在bean初始化前后進行一些處理工作;
         postProcessBeforeInitialization:在初始化之前工作
         postProcessAfterInitialization:在初始化之后工作

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM