Spring-Beanポストプロセッサ
ザ・ BeanPostProcessor インターフェースは、独自のインスタンス化ロジック、依存関係解決ロジックなどを提供するために実装できるコールバックメソッドを定義します。1つ以上のBeanPostProcessor実装をプラグインすることにより、SpringコンテナーがBeanのインスタンス化、構成、および初期化を完了した後に、いくつかのカスタムロジックを実装することもできます。 。
複数のBeanPostProcessorインターフェースを構成でき、これらのBeanPostProcessorインターフェースが実行される順序を制御するには、 order BeanPostProcessorが実装する場合のプロパティ Ordered インターフェース。
BeanPostProcessorsはBean(またはオブジェクト)インスタンスで動作します。つまり、Spring IoCコンテナーがBeanインスタンスをインスタンス化し、BeanPostProcessorインターフェースがその作業を実行します。
アン ApplicationContext の実装で定義されたBeanを自動的に検出します BeanPostProcessor これらのBeanをインターフェースし、ポストプロセッサーとして登録し、Beanの作成時にコンテナーによって適切に呼び出されるようにします。
例
次の例は、ApplicationContextのコンテキストでBeanPostProcessorsを作成、登録、および使用する方法を示しています。
動作するEclipseIDEを配置し、次の手順を実行してSpringアプリケーションを作成しましょう-
ステップ | 説明 |
---|---|
1 | SpringExampleという名前のプロジェクトを作成し、の下にパッケージcom.tutorialspointを作成します。src 作成したプロジェクトのフォルダ。 |
2 | Spring Hello Worldの例の章で説明されているように、[外部JARの追加]オプションを使用して必要なSpringライブラリを追加します。 |
3 | com.tutorialspointパッケージの下にJavaクラスHelloWorld、InitHelloWorld、およびMainAppを作成します。 |
4 | Beans構成ファイルBeans.xmlをsrc フォルダ。 |
5 | 最後のステップは、すべてのJavaファイルとBean構成ファイルのコンテンツを作成し、以下で説明するようにアプリケーションを実行することです。 |
これがの内容です HelloWorld.java ファイル-
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
public void init(){
System.out.println("Bean is going through init.");
}
public void destroy(){
System.out.println("Bean will destroy now.");
}
}
これは、Beanの初期化の前後にBean名を出力するBeanPostProcessorを実装する非常に基本的な例です。両方のポストプロセッサメソッド内のBeanオブジェクトにアクセスできるため、Beanを初期化する前後に、より複雑なロジックを実装できます。
これがの内容です InitHelloWorld.java ファイル-
package com.tutorialspoint;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.BeansException;
public class InitHelloWorld implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("BeforeInitialization : " + beanName);
return bean; // you can return any other object as well
}
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("AfterInitialization : " + beanName);
return bean; // you can return any other object as well
}
}
以下は、の内容です MainApp.javaファイル。ここで、シャットダウンフックを登録する必要がありますregisterShutdownHook()AbstractApplicationContextクラスで宣言されているメソッド。これにより、正常なシャットダウンが保証され、関連するdestroyメソッドが呼び出されます。
package com.tutorialspoint;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.getMessage();
context.registerShutdownHook();
}
}
以下は設定ファイルです Beans.xml initおよびdestroyメソッドに必要-
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld"
init-method = "init" destroy-method = "destroy">
<property name = "message" value = "Hello World!"/>
</bean>
<bean class = "com.tutorialspoint.InitHelloWorld" />
</beans>
ソースとBeanの構成ファイルの作成が完了したら、アプリケーションを実行しましょう。アプリケーションに問題がない場合は、次のメッセージが出力されます-
BeforeInitialization : helloWorld
Bean is going through init.
AfterInitialization : helloWorld
Your Message : Hello World!
Bean will destroy now.