我正在尝试理解 Lifecycle
接口(interface)逻辑。
Lifecycle
的文档说:
Containers will propagate start/stop signals to all components that apply within each container, e.g. for a stop/restart scenario at runtime.
但似乎 cantainer 根本没有调用这个方法(开始/停止)。
例如,下一个代码片段的结果只是单个输出“>> call: is running: false”
@Configuration
public class TestApp implements Lifecycle {
boolean runStatus = false;
@Override
public void start() {
System.err.println(">> call: start (Lifecycle)");
runStatus = true;
}
@Override
public void stop() {
System.err.println(">> call: stop (Lifecycle)");
runStatus = false;
}
@Override
public boolean isRunning() {
System.err.println(">> call: is running: " + runStatus);
return runStatus;
}
public static void main(String[] args) {
AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(TestApp.class);
ctx.stop();
}
}
附言我听说过 SmartLifecycle
,它运行良好。但我对如何正确使用 Lifecycle
中的启动/停止方法很感兴趣。
最佳答案
您应该手动 start()
和 stop()
上下文。
@Configuration
public class TestApp implements Lifecycle {
boolean runStatus = false;
public TestApp (){}
@Bean
public TestApp testApp(){
return new TestApp();
}
@Override
public void start() {
System.err.println(">> call: start (Lifecycle)");
runStatus = true;
}
@Override
public void stop() {
System.err.println(">> call: stop (Lifecycle)");
runStatus = false;
}
@Override
public boolean isRunning() {
System.err.println(">> call: is running: " + runStatus);
return runStatus;
}
public static void main(String[] args) {
AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(TestApp.class);
ctx.start();
TestApp ta = ctx.getBean(TestApp.class);
ctx.stop();
}
}
关于java - 在什么情况下 Spring 调用 Lifecycle 的启动/停止 Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38031006/