ライフサイクルの春春の豆ベース(C)

春のIoCコンテナ豆の初期化プロセス、本来の目的の春のIoCコンテナは、コンテナ内のそのライフサイクルの存在のために豆、豆を管理することで、彼の初期化と破壊は、プロセスを必要とし、プロセスは、いくつかの自己定義が必要です私たちは、ライフサイクルの春豆知識を使用する必要があり、特定のニーズを満たすために彼らの行動の一部を変更するコードを挿入することができます。

  春のIoCコンテナの初期化プロセスのライフサイクルを理解し、豆を破壊するために。次の図は、豆のプロセススプリングIoCコンテナの初期化および破壊を示します

豆のSpringIoc容器管理

手順を説明します。

1豆は、インターフェイスを実装した場合。BeanNameAware setBeanName方法のを、このメソッドを呼び出すと、春のIoCコンテナ管理ビーンとなります。

2 Beanのインタフェースを実装した場合。BeanFactoryBean setBeanFactory方法のを、それがこのメソッドを呼び出します。

3。ビーンは、インタフェース実装する場合ApplicationContextAware setApplicationContextメソッドのを、そして春のIoCコンテナにもApplicationContextのインタフェースの実装クラスである必要があり、それはそれ以外の場合は呼び出されません、このメソッドを呼び出します。

4 Beanのインタフェースを実装している場合。BeanPostProcessor postProcessBeforeInitialization方法を、それがこのメソッドを呼び出します。

5 Beanのインタフェースを実装した場合。BeanFactoryPostProcessor afterPropertiesSet方法を、彼は、このメソッドを呼び出します。

6豆カスタム初期化メソッド場合は、カスタムの初期化メソッドを呼び出します。

7ビーンは、インタフェースに実装している場合。BeanPostProcessor postProcessAfterInitialzation方法を、これらの呼び出しを完了し、この時点ビーンの初期化は、春のIoCコンテナの中にもありますが、ユーザーは豆のサービスを導き出すことができ、完了です。

サーバーがダウンしているかオフになって春のIOCの出会いである場合には、以下のように、彼は、Beanの破壊に呼び出されます

8 Beanのインタフェースを実装した場合。DisposableBean方法を破壊し、それを呼び出します。

9あなたが破壊の独自のメソッドを定義している場合、それは、カスタムメソッドを実行します。



彼は理論の多くは、その後、我々はそれを証明次の練習をすると発表しました

図1は、まず、春のIoCコンテナは、それを管理するために聞かせて、私たちが達成するために必要なこの時間BeanPostProcessImplクラスを定義BeanPostProcessorの、インターフェースを4と7を証明します。


パッケージ pro.jamal.blog.domain。輸入 org.springframework.beans.BeansException。
輸入 org.springframework.beans.factory.config.BeanPostProcessor。/ ** 
 * @author:lyj 
 * @Date:2019年6月2日
 * / パブリッククラス BeanPostProcessImpl 実装 BeanPostProcessor { / ** 
     *在初始化之前的方法
     * / 
    @Override パブリックオブジェクトpostProcessBeforeInitialization(オブジェクト・ビーンは、ストリングS)がスロー BeansExceptionを{ 
        のSystem.out.println( " [ "+ bean.getClass()getSimpleName()+" ]:初始化开始... ")。
        リターン




 

    
    豆; 
    } / ** 
     初期化後の処理* 
     * / 
    @Override パブリックオブジェクトpostProcessAfterInitialization(Beanオブジェクト、文字列S)がスロー BeansException { 
        するSystem.out.println( " [ " + bean.getClass()getSimpleName()+ "を]:端の例... \ N-BYE「);
         戻り豆を、
    } 
}

    
    

2、インターフェース1,2,3,5、その後、カスタム初期化メソッドを実装するクラスの定義の中で、第6条の理論を証明するために、簡単な印刷

パッケージ pro.jamal.blog.domain。輸入 org.springframework.beans.BeansException。
輸入 org.springframework.beans.factory *。;
輸入 org.springframework.context.ApplicationContext;
輸入 org.springframework.context.ApplicationContextAware。/ ** 
 * @author:lyj 
 * @Date:2019年6月2日
 * / パブリッククラスの人が実装 BeanNameAware、BeanFactoryAware、ApplicationContextAware、InitializingBean、DisposableBean {
     プライベート文字列名を、
    プライベート   整数歳。
    @Override 公共のボイド




 

     setBeanFactory(たBeanFactoryたBeanFactory)はスロー BeansException { 

        するSystem.out.println( " [ "+ この .getClass()getSimpleName()+" ] "+" 了BeanFactoryAware接口的setBeanFactory方法调用 ")。
    } 

    @Override 公共ボイド setBeanName(文字列S){ 
        するSystem.out.println( " [ "+ この .getClass()getSimpleName()+" ] "+" 了BeanNameAware接口的setBeanName方法调用 ")。
    } 
    @Override 公共ボイド(破壊)スロー
     

      {例外
        System.out.println( " "+ この .getClass()getSimpleName()+" ] "+" 调用了DisposableBean接口的破壊方法 ")。

    } 

    @Override 公共ボイド afterPropertiesSet()スロー {例外
        ( "するSystem.out.println [ "+ この .getClass()getSimpleName()+" ] "+" 了InitializingBean接口的afterPropertiesSet方法调用 ")。
    } 
    @Override 公共ボイド setApplicationContext(ApplicationContextのApplicationContextの)はスロー BeansException { 
        のSystem.outは。
     


     
 " + この。.GetClass()getSimpleName()+" ] "+" setApplicationContext ApplicationContextAwareインタフェースメソッドを呼び出す "); 
    } 公共ボイド diyInit(){ 
        System.out.printlnは(" [「+ この .GetClass(。)getSimpleName ()+ " ] " + " カスタム初期化開始 "); 
    } パブリック文字列のgetName(){
         戻り名; 
    } 公共ボイドのsetName(文字列名){
         この .nameの=名; 
    } パブリック整数getAge(){
         戻り年齢;
    } パブリック


     





    

     

    

     ボイド setAge(整数年齢){
         この .age =年齢。
    } 



}

3、xml設定

<?xml version =」1.0 "エンコード=" UTF-8 "?> 
<豆のxmlns =" http://www.springframework.org/schema/beans " 
       のxmlns:XSI =" http://www.w3.org / 2001 / XMLスキーマ・インスタンス " 
       のxsi:のschemaLocation =" http://www.springframework.org/schema/beans 
                        のhttp://www.springframework.org/schema/beans/spring-beans.xsd ">
 
    <ビーンクラス = " pro.jamal.blog.domain.BeanPostProcessImpl "/> 
    <ビーンクラス =" pro.jamal.blog.domain.Person " INIT-方法= " diyInit "> 
        <プロパティ名=」名前"値=" yongjar "/> 
        <プロパティ名=" 年齢 "値=" 14「/> 
    </豆> 

</豆>

4.テスト

パブリック クラス BeanCycleTest {
     公共 静的 ボイドメイン(文字列[]引数){ 
        ClassPathXmlApplicationContextコンテキスト= 新しい ClassPathXmlApplicationContext( " bean.xml ")。
         人豆= context.getBean(人。クラス)。
        System.out.println(bean.getName()+ " " + bean.getAge()); 
        context.close(); 
    } 
}
                

印刷結果

画像

おすすめ

転載: www.cnblogs.com/jamal/p/10963954.html