Spring context初期化後のbean initのシーン
1739 ワード
本人は最近難題に出会いました.spring webflowに対して拡張をした後、spring context初期化が完了したら、自分のbeanに対していくつかのinitの初期化操作を行う必要があります.
構想を実現して、私達はspring contextの自分のlistenerのライフサイクルの方法に助けを借りたいです.このイベントは、spring contextの初期化が完了したら呼び出します.私たちはこの方法で自分たちのbeanのinit方法を呼び出すことができます.
実装の詳細:
パブリックインターフェースInitilizationをカスタマイズして、spring context初期化後に呼び出されたいすべてのbeanはこのインターフェースを実現します.
spring contextを実現するAppplication Listenerをカスタマイズします.
これにより、spring context初期化後の処理ロジックの実現が可能となります.
構想を実現して、私達はspring contextの自分のlistenerのライフサイクルの方法に助けを借りたいです.このイベントは、spring contextの初期化が完了したら呼び出します.私たちはこの方法で自分たちのbeanのinit方法を呼び出すことができます.
実装の詳細:
パブリックインターフェースInitilizationをカスタマイズして、spring context初期化後に呼び出されたいすべてのbeanはこのインターフェースを実現します.
public interface Initilization{
// spring context
public void init();
}
spring contextを実現するAppplication Listenerをカスタマイズします.
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
@SuppressWarnings("rawtypes")
public class PostContextInitilization implements ApplicationListener {
@Autowired(required=false)
List<Initilization> list;
public List<Initilization> getList() {
return list;
}
public void setList(List<Initilization> list) {
this.list = list;
}
public void onApplicationEvent(ApplicationEvent event) {
// TODO Auto-generated method stub
if(list == null){
return;
}
if(event instanceof ContextRefreshedEvent){
for(Initilization initBean:list){
initBean.initAfterContextSetup();
}
}
}
}
これにより、spring context初期化後の処理ロジックの実現が可能となります.