美文网首页
Lifecycle和SmartLifecycle以及@PostC

Lifecycle和SmartLifecycle以及@PostC

作者: 简书徐小耳 | 来源:发表于2018-11-23 12:36 被阅读6次

我们的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初始化之后进行调用

相关文章

网友评论

      本文标题:Lifecycle和SmartLifecycle以及@PostC

      本文链接:https://www.haomeiwen.com/subject/ulhjqqtx.html