SpringのBeanライフサイクル内のcalback方法とSpring容器起動閉鎖時のcalback方法
Springで管理されているbeanは、Springで呼び出されたcalbackをライフサイクル内に配置することができます.Springで提供される特徴インターフェースを実現することと、calbackを配置することによって、2つの方法があります.
1,Spring提供の特徴インターフェースを実現することにより,InitializingBeanインターフェースを実現することにより,Spring容器はbeanを初期化する際に,beanのafterPropertiesset方法を呼び出すことができ,Dispsable Benインターフェースを実現することにより,Spring容器はbeanを破壊する時にBeanのdestroyを呼び出すことができる.
例:
Springはまた、最上位層に初期化と廃棄方法を定義し、ビーンの初期化と廃棄方法を一定の命名規範に基づいて定義する限り、これらの方法を個々に初期化と廃棄方法を指定する必要はない.これらの方法が存在しないbeanに対して、Springはこれらのbeanを初期化する際にはこのような構成を無視する.
Spring容器の起動とクローズ時に、beanのcalbackを配置する方法は、通常はバックグラウンドプログラムを設定するために用いられ、起動後はずっと(MQをポーリングするなど)しています.Springが提供するインターフェースを実現することにより、Lifecycle、phasedまたはSmartLifecycleを実現します.
Spring起動時とクローズ時に呼び出すコールバック方法:
例:
isRunningの戻り値はSpringがオフになった時にstop(Runnable arg 0)メソッドを実行するかどうかを決定し、tureは実行します.
get Phiteの戻り値は起動の順序を決定し、値が小さいほど先に起動し、後に閉じるほど、このようなbeanが複数あるときにこれらのbean間で起動する優先度を調整するために使用される.
*ctx.register Shutdown Hook()を設定して、Spring容器が閉まる時にstop方法を呼び出します.
AbstractAplication Contect ctx=new Class PathXml Apple Controtext(「conf/lfCycleAppcontext.xml」);
ctx.register Shutdown Hook()
1,Spring提供の特徴インターフェースを実現することにより,InitializingBeanインターフェースを実現することにより,Spring容器はbeanを初期化する際に,beanのafterPropertiesset方法を呼び出すことができ,Dispsable Benインターフェースを実現することにより,Spring容器はbeanを破壊する時にBeanのdestroyを呼び出すことができる.
例:
public class InitDisposeBean implements InitializingBean,DisposableBean {
protected static final Log log = LogFactory.getLog(InitDisposeBean.class);
@Override
public void afterPropertiesSet() throws Exception {
log.info("afterPropertiesSet");
}
@Override
public void destroy() throws Exception {
log.info("destroy");
}
public void test() {
log.info("test");
}
}
<bean id="InitDisposeBean" class="com.test.spring.lifecycle.InitDisposeBean" />
2、プロファイルを介してcalback方法を指定します.public class InitDisposeCfgBean {
protected static final Log log = LogFactory.getLog(InitDisposeCfgBean.class);
public void init() {
log.info("init");
}
public void cleanup() {
log.info("cleanup");
}
public void test() {
log.info("test");
}
}
<bean id="InitDisposeCfgBean" class="com.test.spring.lifecycle.InitDisposeCfgBean" init-method="init" destroy-method="cleanup"/>
は通常、第二の方法を推奨しています.この方法はIoCの思想に合致しています.Springのインターフェースを実現していません.コードはSpringに独立しています.InitializingBenを実現しながらinit-methodを指定します.Initializing BeafterPropertiesset方法はinit-methodで指定する前に呼び出します.Springはまた、最上位層に初期化と廃棄方法を定義し、ビーンの初期化と廃棄方法を一定の命名規範に基づいて定義する限り、これらの方法を個々に初期化と廃棄方法を指定する必要はない.これらの方法が存在しないbeanに対して、Springはこれらのbeanを初期化する際にはこのような構成を無視する.
<beans default-init-method="init" default-destroy-method="cleanUp">
<bean ....>
</beans>
はSpring容器の起動とクローズ時に、beanのcalbackを配置する方法は、通常はバックグラウンドプログラムを設定するために用いられ、起動後はずっと(MQをポーリングするなど)しています.Springが提供するインターフェースを実現することにより、Lifecycle、phasedまたはSmartLifecycleを実現します.
Spring起動時とクローズ時に呼び出すコールバック方法:
例:
public class LfCycleBean1 implements SmartLifecycle{
protected static final Log log = LogFactory.getLog(LfCycleBean1.class);
private boolean isRunning = false;
@Override
public boolean isAutoStartup() {
// TODO Auto-generated method stub
return true;
}
@Override
public void stop(Runnable arg0) {
arg0.run();
isRunning = false;
log.info("stop Runnable");
}
@Override
public boolean isRunning() {
// TODO Auto-generated method stub
return isRunning;
}
@Override
public void start() {
isRunning = true;
log.info("start ");
}
@Override
public void stop() {
isRunning = false;
log.info("stop");
}
@Override
public int getPhase() {
return -1;
}
}
<bean id="LfCycleBean1" class="com.test.spring.lifecycle.LfCycleBean1" />
isAutoStartpの戻り値はSpring起動時にstart方法を実行するかどうかを決定し、tureは実行します.isRunningの戻り値はSpringがオフになった時にstop(Runnable arg 0)メソッドを実行するかどうかを決定し、tureは実行します.
get Phiteの戻り値は起動の順序を決定し、値が小さいほど先に起動し、後に閉じるほど、このようなbeanが複数あるときにこれらのbean間で起動する優先度を調整するために使用される.
*ctx.register Shutdown Hook()を設定して、Spring容器が閉まる時にstop方法を呼び出します.
AbstractAplication Contect ctx=new Class PathXml Apple Controtext(「conf/lfCycleAppcontext.xml」);
ctx.register Shutdown Hook()