我们的lifeCyle 不可以直接使用
因为spring中的调用了DefaultLifecycleProcessor的onRefresh方法 而该方法的
autoStartupOnly=true 当为true的时候 只有SmartLifecycle才可以调用start方法
因为这个时候会按照phase进行调用
autoStartupOnly=false 则只要是Lifecycle 既可以被调用 我们会给其默认的phase
那么我们怎么让LifecycleProcessor 执行start方法而不是onfresh方法
我们可以自定义一个LifecycleProcessor 让其onfresh方法调用start方法
具体如下
注意bean的名称必须命名为lifecycleProcessor
@Component("lifecycleProcessor")
public class MinivisionDefaultLifecycleProcessor extends DefaultLifecycleProcessor {
/**
* 这边重写了onRefresh方法 让其调用
*/
@Override
public void onRefresh() {
super.start();
}
}
还有一个方式就是我们获取到spring容器后显示的调用start方法 SmartLifecycle
他可以自动启动和关闭(其也会自动关闭lifeCycle) 且可以设置phase、
当然我们通过改变lifecycleProcessor也可以让Lifecycle 自动start 不过 没必要这么做
@PostConstruct 是在该bean实例化好后初始化之前即在initializeBean通过postProcessor(InitDestroyAnnotationBeanPostProcessor)调用
lifeCyle 和SmartlifeCyle
是在所有的单例非懒加载bean初始化之后进行调用









网友评论