春 - ビーンポストプロセッサ
ビーンポストプロセッサへの豆は、初期化メソッドが呼び出される前と後の追加処理を可能にします。
BeanPostProcessor インタフェースがコールバックメソッドを定義するには、そのインスタンス化ロジック、依存関係の解析ロジックを提供するための方法を達成することができます。また、設定した後、コンテナのインスタンス化の1つ以上の春BeanPostProcessorを挿入することによって達成し、カスタム・ロジックのコールバックメソッドを実装するBeanを初期化することができます。
あなたはBeanPostProcessorを設定することで実現し、複数のBeanPostProcessorインタフェースは、設定することができます 発注 提供するインタフェースを 順序はこれらBeanPostProcessorインターフェイスの実行順序を制御するための属性。
BeanPostProcessorは、Bean(またはオブジェクト)にスプリングIoCコンテナは、ビーン・インスタンスをインスタンス化し、次いでそのBeanPostProcessorインタフェースを動作することを意味するインスタンスの操作を行うことができます。
ApplicationContextの 自動的によって検出 BeanPostProcessorの 実装定義インターフェイス豆、豆は、ポストプロセッサを登録し、その後、容器内のBeanを作成することによって、適切な時間にそれを呼び出します。
例:
Helloworld.java
パッケージcom.zk.myspring。 パブリッククラスのHelloWorld { パブリック文字列メッセージ。 パブリック文字列のgetMessage(){ リターン・メッセージ、 } 公共ボイドsetMessage(文字列メッセージ){ this.message =メッセージ。 } 公共ボイドのinit(){ System.out.printlnは( "INIT法")。 } 公共ボイドは(){破壊 するSystem.out.printlnは( "破壊法を"); } }
これは、任意のBeanの初期化の前と後にBeanの名前を入力しますBeanPostProcessorを達成するために非常に単純な例です。あなたは組み込みのBeanオブジェクト後処理プログラムにアクセスするための2つのメソッドを持っているので、あなたは、初期化前と後の豆で、より複雑なロジックを実装することができます。
InitHelloworld.java
パッケージcom.zk.myspring。 輸入org.springframework.beans.BeansException。 輸入org.springframework.beans.factory.config.BeanPostProcessor。 パブリッククラスInitHelloworldはBeanPostProcessorを実装{ @Override パブリックオブジェクトpostProcessAfterInitialization(オブジェクト・ビーン、文字列のbeanName)が BeansException {スロー // TODO自動生成方法スタブ のSystem.out.println( "postProcessAfterInitializationを" +のbeanName)。 Beanを返します。 } @Override パブリックオブジェクトpostProcessBeforeInitialization(オブジェクト・ビーン、文字列のbeanName) BeansException {スロー // TODO自動生成方法スタブ のSystem.out.println( "postProcessBeforeInitializationは:" +のbeanName)。 Beanを返します。 } }
applicationContext.xmlを
<?xml version = "1.0"エンコード= "UTF-8"?> <豆 のxmlns = "http://www.springframework.org/schema/beans" のxmlns:XSI = "http://www.w3.org / 2001 / XMLスキーマ・インスタンス" のxmlns:P = "http://www.springframework.org/schema/p" のxsi:schemaLocationの=" http://www.springframework.org/schema/beansのhttp:// WWW。 springframework.org/schema/beans/spring-beans-3.0.xsd "> <Bean名=" HelloWorldの」クラス= "com.zk.myspring.Helloworld"のinitメソッド= "INIT"破壊法は、= ""破壊> <プロパティ名= "メッセージ"値= "メッセージ"> </ property>の </ビーン> <Beanクラス= "com.zk.myspring.InitHelloworld" /> </豆>
ここで MainApp.javaの ファイルの内容。ここでは、AbstractApplicationContextクラスで文の近くにフックを登録する必要があり registerShutdownHook() メソッド。これは、通常は閉じていることを確認し、法を破壊するために関連の呼び出します。
Main.java
パッケージいるTestMain; 輸入org.springframework.context.ApplicationContext; 輸入org.springframework.context.support.ClassPathXmlApplicationContext; 輸入com.zk.myspring.Helloworld。 パブリッククラスメイン{ パブリック静的無効メイン(文字列[] args) { ApplicationContextのAC =新しいClassPathXmlApplicationContext( "applicationContext.xmlを")。 HelloWorld HW =(HelloWorldの)ac.getBean( "HelloWorldの")。 System.out.println(hw.getMessage())。 } }
結果は以下の通りであります: