Lifecycle
Lifecycle接口定义Spring容器的生命周期,任何springbean都可以实现该接口。当ApplicationContext接收启动和停止信号时,spring容器将在容器上下文中找出所有实现了LifeCycle及其子类接口的类,并一一调用它们实现类对应的方法。
这个接口下面的方法是Spring容器生命周期中的回调方法。Bean也有与之对应的Bean生命周期回调,参考:Bean的生命周期
spring是通过委托给生命周期处理器LifecycleProcessor来实现这一点的。

LifecycleProcessor继承于Lifecycle接口,新增了刷新和关闭方法。
AbstractApplicationContext中Lifecycle的处理逻辑
AbstractApplicationContext关联了LifecycleProcessor,在其refresh的最后finishRefresh方法里面调用到了onRefresh方法触发Lifecycle的start方法:
1 | // Propagate refresh to lifecycle processor first. |
注意,这里只会刷新SmartLifecycle的子类,具体处理逻辑如下:
1 | private void startBeans(boolean autoStartupOnly) { |
onRefresh方法传入了autoStartupOnly=true,而SmartLifecycle的isAutoStartup方法默认返回true,故默认情况下会处理SmartLifecycle的子类。
针对Lifecycle的子类,需要自己手动调用ApplicationContext的start或者stop方法来触发具体bean的生命周期实现。
Lifecycle使用例子
1 |
|
1 | public static void main(String[] args) { |