Lifecycle
Lifecycle
接口定义Spring
容器的生命周期,任何spring
bean都可以实现该接口。当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) { |