7、spring注解學習(bean的生命周期)——@Bean中通過initMethod和destroyMethod指定bean的初始化方法和銷毀方法


 

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

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

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

 

 

1、創建一個Dog類

public class Dog {
    
    public Dog() {
        System.out.println("Dog的構造方法執行了");
    }

    public void init() {
        System.out.println("Dog的初始化方法執行了");
    }
    
    public void destroy() {
        System.out.println("Dog的銷毀方法執行了");
    }
}

2、在注入Dog時在@Bean中中指定初始和銷毀方法

/**
 * 測試bean的生命周期的配置
 */
@Configuration
public class MainConfigOfLifeCycle {
    /*
     * 1、指定初始化和銷毀方法
     *         通過@Bean指定initMethod和destroyMethod
     */
    @Bean(name="dog",initMethod="init",destroyMethod="destroy")
    public Dog dog() {
        return new Dog();
    }
}

3、創建測試方法進行測試

    /*
     * 測試@Bean中指定initMethod和destroyMethod
     */
    @Test
    public void test01() {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
        applicationContext.close();
    }

得到結果:

 

說明: 因為注入的Dog是單例模式,所以在容器創建時就注入,另外調用了初始化方法,容器關閉前執行了銷毀方法

 

現在進行如果Dog是多例模式時測試

  1、修改配置類將Dog設置為多例

/**
 * 測試bean的生命周期的配置
 */
@Configuration
public class MainConfigOfLifeCycle {
    /*
     * 1、指定初始化和銷毀方法
     *         通過@Bean指定initMethod和destroyMethod
     */
    @Bean(name="dog",initMethod="init",destroyMethod="destroy")
    @Scope("prototype") public Dog dog() {
        return new Dog();
    }
}

  2、修改測試方法

    /*
     * 測試@Bean中指定initMethod和destroyMethod
     */
    @Test
    public void test01() {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
        Object bean = applicationContext.getBean("dog");
        applicationContext.close();
    }

測試結果

 

 說明:多例對象只有在獲取的時候容器才給構造並調用初始化方法,另外容器不會調用多例對象的銷毀方法


免責聲明!

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



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