ターン:spring容器の初期化が完了したら、ある方法を実行します.

1629 ワード

回転:
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               。
      }
  }