1、编写实现Lifecycle接口的bean
package cn.java.demo.beantag.lifecycle;
import org.springframework.context.Lifecycle;
/**
* 不能自动启动
* @author zhouzhian
*/
public class FooOneLifecycle implements Lifecycle {
boolean isRunning = false;
@Override
public void start() {
this.codeIn("start()");
this.isRunning = true;
}
@Override
public void stop() {
this.codeIn("stop()");
this.isRunning = false;
}
@Override
public boolean isRunning() {
return this.isRunning;
}
private void codeIn(String methodName) {
System.out.println("code in : " + FooOneLifecycle.class.getName() + ":" + methodName);
}
}
package cn.java.demo.beantag.lifecycle;
import org.springframework.context.SmartLifecycle;
/**
* 自动启动的bean
* @author zhouzhian
*/
public class FooOneSmartLifecycle implements SmartLifecycle {
private Boolean isAutoStartup = true;
private boolean isRunning = false;
private void codeIn(String methodName) {
System.out.println("code in : " + FooOneSmartLifecycle.class.getName() + ":" + methodName);
}
public void setIsAutoStartup(Boolean isAutoStartup) {
this.isAutoStartup = isAutoStartup;
}
@Override
public void start() {
this.codeIn("start()");
this.isRunning = true;
}
@Override
public void stop() {
this.codeIn("start()");
this.isRunning = false;
}
@Override
public boolean isRunning() {
return this.isRunning;
}
@Override
public int getPhase() {
return 0;
}
@Override
public boolean isAutoStartup() {
return this.isAutoStartup;
}
@Override
public void stop(Runnable callback) {
this.isRunning = false;
callback.run();
}
}
2、配置bean
<!-- 带启动方法的bean,在jmx中的消费者就有应用到 -->
<!-- 机制:实现SmartLifecycle接口的bean,在ApplicationContext启动的最后一步,会自动调用里面的start方法
实现Lifecycle接口的bean,要手动启动触发启动
-->
<bean id="fooOneLifecycle" class="cn.java.demo.beantag.lifecycle.FooOneLifecycle" />
<bean id="fooOneSmartLifecycle" class="cn.java.demo.beantag.lifecycle.FooOneSmartLifecycle">
<property name="isAutoStartup" value="true" />
</bean>