初期化メソッドが呼び出される前及び後のポストプロセッサの(1)豆追加の処理に豆を可能にします。
(2)すべてのBeanインスタンスIOCコンテナではなく、単一のインスタンスに対して1つによってビーンポストプロセッサ処理1。代表的な用途は次のとおり正しビーンのプロパティを確認したり、特定の基準に基づいてBeanプロパティを変更します。
(3)初期化メソッドが呼び出される前及び後に、インターフェイスを実装するビーンポストプロセッサインタフェースBeanPostProcessor必要性のために、スプリングが各インスタンスは、Beanに渡されるであろうが、以下の2つの方法がインタフェース上に記載されています。
postProcessAfterInitialization、postProcessBeforeInitialization
豆ポストプロセッサの後に豆のライフサイクルを追加します。
- メソッドを介してインスタンスコンストラクタまたは豆植物を作成します。
- 豆や他のBean参照は、プロパティの値を設定します。
- 豆の方法の例はpostProcessBeforeInitializationビーンポストプロセッサに送信されます。
- 初期化メソッドは、ビーンと呼ばれています。
- 豆の方法の例はpostProcessAfterInitializationビーンポストプロセッサに送信されます。
- 豆を使用することができます。
- 容器が閉じられたときに、破壊のBeanメソッドを呼び出します。
Car.java
パッケージcom.gong.spring.beans.cycle。 パブリック クラスの車{ プライベート文字列名; パブリック文字列のgetName(){ 戻り名。 } 公共 ボイドのsetName(文字列名){ System.out.printlnは( "のsetName ..." )。 この .nameの= 名前; } パブリックカー(){ System.out.printlnは( "車的构造器" )。 } 公共 ボイドのinit(){ System.out.printlnは( "INIT ..." )。 } 公共 のボイド破壊(){ System.out.printlnは( "破壊します..." ); } @Override パブリック文字列のtoString(){ リターン "カー[NAME =" +名+ "]" 。 } }
myBeanPostProcessor.java
パッケージcom.gong.spring.beans.cycle; インポートorg.springframework.beans.BeansException; インポートorg.springframework.beans.factory.config.BeanPostProcessor; パブリック クラス MyBeanPostProcessor 実装BeanPostProcessor { / * *豆:例自分自身 *のbeanName:IOC Beanコンテナ構成の名前は、 *戻り値は、実際に豆ユーザー注に返されます:あなたは、次の二つの方法で返されたBeanを変更することができます *でも新しいBeanを返す * * / @Override パブリック(オブジェクトpostProcessAfterInitialization Beanオブジェクト、文字列のbeanName)がスローBeansException { // TODO自動生成されたスタブ方法を System.out.println( "postProcessAfterInitialization" + "" +豆+ "" + のbeanName); 車CAR = 新しい新しいカー(); car.setName( "Benchi" ); 戻りCAR; } @Override パブリックオブジェクトpostProcessBeforeInitialization(オブジェクト豆、文字列のbeanName)がスローBeansException { // TODO自動生成されたスタブ方法、 のSystem.out.println( "postProcessBeforeInitialization" + "" +豆+ "" + ;のbeanName) // 豆の全てに起因しそう、実行されます決定するために、ビーンが対処したい指定 IF(「CAR」。 等号(のbeanName)){ //... } 戻り豆。 } }
豆-cycle.xml
<?= "1.0"エンコード= "UTF-8" XMLバージョン?> < 豆の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" > < ビーンID ="車「クラス=」com.gong.spring.beans.cycle.Car」のinitメソッド= 『INIT』 メソッドを破壊= 『破壊』> < プロパティ名= 『名前』 </ 豆> <! - ポストプロセッサBeanの構成された- > < 豆のクラス= "com.gong.spring.beans.cycle.MyBeanPostProcessor" > </ 豆> </ 豆>
Main.java
パッケージcom.gong.spring.beans.cycle。 輸入org.springframework.context.support.ClassPathXmlApplicationContext; パブリック クラスメイン{ 公共 静的 ボイドメイン(文字列[]引数){ // 1创建バネ的IOC容器对象 ClassPathXmlApplicationContext CTX = 新しい ClassPathXmlApplicationContext( "豆-cycle.xml" )。 // 2.从容器中获取豆实例 カー車=(車)ctx.getBean( "車" )。 System.out.println(car.toString())。 ctx.close(); } }
出力:
我々は2つの場所に集中したいです。
余分な2つの方法の添加後の豆のライフサイクルなしのポストプロセッサと比較して(1)。
(2)はpostProcessBeforeInitialization Carオブジェクトの属性を変更し、対応する変更施さも車という名前の属性名値Main.java豆で、その結果、ユーザに返さ。