ライフサイクルの豆Spring5ソースコード解析

ライフサイクル

  作成---->初期化--->破壊

オブジェクトの1例

2.セッター噴射実行ビーン属性の依存性注入

前記方法setBeanNameを実行するBeanNameAware setBeanName()インターフェースが達成された場合、

インターフェースはメソッドを実行され、達成された場合4.BeanFactoryAware setBeanFactory()、setBeanFactory

5. BeanPostProcessor processBeforeInitialization()は、関連するプロセッサと、この例の前processBeforeInitializationビーン初期化()メソッドを実行します

ためafterPropertiesSet()が実行されるインターフェースが実現される場合afterPropertiesSet()、InitializingBean 6。initメソッドで定義されたBean定義ファイル

processAfterInitializationの7.BeanPostProcessors()、関連するプロセッサがある場合、それは豆の初期化()メソッドの前に、このインスタンスprocessAfterInitializationを実行すること

豆は、このインタフェースを実装する場合に容器が、閉鎖されDestoryはの8.DisposeablebBean()、彼のDestoryは()メソッドを実行します

9.定義ファイルは、容器が閉じられたときに、定義ファイル方法ビーンで定義された「Destoryは-法」を使用することができる豆破壊法を定義します

 

注意:

 ケリーを愛したときに、容器内のデフォルトの1.単一のケースは初期化されます

 各オブジェクトの例2.それは豆を初期化するために取得するとき

 


 

 

 豆の初期化が実装されたすべての設定メソッド内で作成されたオブジェクトを指します。指定された実行の方法

   @Bean (にinitMethod、Destoryは)は、豆、これら2つのメソッドを作成すると同時に、初期化および破壊方法を指定します

   初期化は、コンストラクタの前または後に実行されますか?引数なしのコンストラクタ!オブジェクトは、最初に初期化後に作成します!引数なしのコンストラクタの最初の実装は、そう!

 

上記のプロセスへの補足:

  ビーンは、(コンストラクタが実行される)作成 - >初期化(カスタムのinitメソッド) - >破壊

  シングルトンオブジェクトを破壊するためにclose()メソッドを呼び出します  

   注意:IOCのコンテナのストレージを使用するMapオブジェクトと連動して、クリア()クリアオブジェクト

   ソースを見て:

閲覧数を入力します。

ビューに[続行]をクリックします:

まず見て:

連続フォローアップ後の明確な方法はのコレクションです

 

 私たちは、特定のクラスを達成するための初期化動作を通過することができます!

 

使用する方法を開発します:


方法aは:@BeanによるINIT-法とDestoryは-方法を指定します。

方法2:豆実装InitializingBean(定義された初期化ロジック)、DisposableBeanを(定義された論理を破壊)させることによって

方法3:JSR250(Java仕様ではなく、春)を使用してください:@PostConstructo:豆で作成され、割り当てが完了すると、初期化メソッドを実行します。@PreDestory:コンテナは豆を破壊する前に、私たちはクリーンアップに努めましょう


 

方法2:

豆:

@Component
public class LifeBean implements InitializingBean, DisposableBean {

    //构造函数
    public LifeBean() {
        System.out.println("LifeBean Constructor");
    }

    /** 接口InitializingBean的方法
     *  //解释 对象有创建 肯定也有给属相赋值的过程!,对象赋值完毕以后才执行该方法  即: (afterPropertiesSet)中文:set方法都走完了时候执行该方法
     * @throws Exception
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        //等同于 @Bean(init =" ")
        //解释 对象有创建 肯定也有给属相赋值的过程!,对象赋值完毕以后才执行该方法
        System.out.println("LifeBean ********> 【InitializingBean.afterPropertiesSet】 ");
    }

    /**
     * 接口DisposableBean 的方法
     * @throws Exception
     */
    @Override
    public void destroy() throws Exception {
        System.out.println("LifeBean ********>【DisposableBean.destroy】");
    }
}

配置和扫包

@Configuration
@ComponentScan("com.toov5.config.beanTest.entity")
public class MyConfig {

}

启动测试:

public class test {
    public test(){

    }
    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext1 = new AnnotationConfigApplicationContext("com.toov5.config");
        applicationContext1.close();
//        System.out.println(applicationContext1);
    }
}

 

方法三

  注解代替了接口:

Bean:

@Component
public class LifeBean {

    //构造函数
    public LifeBean() {
        System.out.println("LifeBean Constructor");
    }
    @PostConstruct
    public void afterPropertiesSet() throws Exception {
        //等同于 @Bean(init =" ")
        //解释 对象有创建 肯定也有给属相赋值的过程!,对象赋值完毕以后才执行该方法
        System.out.println("LifeBean ********> 【InitializingBean.afterPropertiesSet】 ");
    }

   @PreDestroy
    public void destroy() throws Exception {
        System.out.println("LifeBean ********>【DisposableBean.destroy】");
    }
}

效果是一样的:

 

  

 Spring Bean生命周期中的后置处理器:  BeanPostProcessor接口


过滤器中,不可以使用注解方式获取Bean对象。 做法: 单独获取上下文ApplicationContext

后置处理器,实现对Bean初始化增强功能

@Component
public class MyApplicationContext implements ApplicationContextAware {
    //开发时候经常做成全局的 进行使用
    private ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        LifeBean lifeBean = applicationContext.getBean("lifeBean", LifeBean.class);
        System.out.println("result————————————————————"+lifeBean.toString());
    }
}

运行后:结果是没问题的

 

おすすめ

転載: www.cnblogs.com/toov5/p/11257106.html