ターン:spring容器の初期化が完了したら、ある方法を実行します.
1629 ワード
回転:
http://www.cnblogs.com/rollenholt/p/3612440.html
webプロジェクトの開発中、特に企業級アプリケーションの開発時には、工事開始時に多くの前置検査を行います.
たとえば、私たちのグループで禁止されているMysqlのグループが使用されているかどうかチェックします.concat関数は、プロジェクトを使用すると起動できなくなり、どのファイルのxmlファイルがこの関数を使用しているかを指摘します.
Springのwebプロジェクトでは、Springの起動過程に介入できます.私たちはSpring容器でビーンを全部初期化してから、いくつかの操作をしたいです.この時にインターフェースを実現できます.
しかし、この時、webプロジェクトには二つのコンテナが存在します.一つはroot appication contextで、もう一つは私達自身のproject Name-servletです. context(root appication contextのサブコンテナとして)
この場合、onAppliation Event方法は2回実行されることになります.上記の問題を避けるために、root appication contextの初期化が完了したら、論理コードを起動します.他の容器の初期化が完了したら、何も処理しないで、修正後のコードを修正します.
以下のとおりです
http://www.cnblogs.com/rollenholt/p/3612440.html
webプロジェクトの開発中、特に企業級アプリケーションの開発時には、工事開始時に多くの前置検査を行います.
たとえば、私たちのグループで禁止されているMysqlのグループが使用されているかどうかチェックします.concat関数は、プロジェクトを使用すると起動できなくなり、どのファイルのxmlファイルがこの関数を使用しているかを指摘します.
Springのwebプロジェクトでは、Springの起動過程に介入できます.私たちはSpring容器でビーンを全部初期化してから、いくつかの操作をしたいです.この時にインターフェースを実現できます.
package com.yk.test.executor.processor
public class InstantiationTracingBeanPostProcessor implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
// , spring 。
}
}
Springのプロファイルに注入を追加します.
<!-- Spring Bean -->
<bean class="com.yk.test.executor.processor.InstantiationTracingBeanPostProcessor"/>
しかし、この時、webプロジェクトには二つのコンテナが存在します.一つはroot appication contextで、もう一つは私達自身のproject Name-servletです. context(root appication contextのサブコンテナとして)
この場合、onAppliation Event方法は2回実行されることになります.上記の問題を避けるために、root appication contextの初期化が完了したら、論理コードを起動します.他の容器の初期化が完了したら、何も処理しないで、修正後のコードを修正します.
以下のとおりです
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
if(event.getApplicationContext().getParent() == null){//root application context parent, .
// , spring 。
}
}