SpringBoot2.x基础篇—Bean的生命周期方法(实现Lifecycle接口)

SpringBoot2.x基础篇—Bean的生命周期方法(实现Lifecycle接口),第1张

源码位置:

bean的创建时在 finishBeanFactoryInitialization(beanFactory); 方法。该方法中也有bean的生命周期的回调方法。 SpringBoot2x基础篇—Bean的生命周期方法(与容器耦合)

而实现了Lifecycle接口的bean,将会在 finishRefresh(); 方法中执行生命周期方法。(此时所有的bean均初始化完毕即Spring初始化完成,与Spring容器的创建解耦)。

常规的LifeCycle接口只是在容器上下文显式的调用start()/stop()方法时,才会去回调LifeCycle的实现类的start stop方法逻辑。并不意味着在上下文刷新时自动启动。

ApplicationContext本身接收启动和停止信号(例如在运行时停止/重启场景)时,spring容器将在容器上下文中找出所有实现了LifeCycle及其子类接口的类,并一一调用它们实现的类。spring是通过委托给生命周期处理器LifecycleProcessor来实现这一点的。

那么,如果Spring容器上下文没有显式的调用start和destory(或者close,stop)等方法时,我们也需要做到生命周期回调,怎么做

如果该 Lifecycle 类所在的上下文在调用 refresh 时,希望能够自己自动进行回调,则返回 true ,false的值表明组件打算通过显式的start()调用来启动,类似于普通的Lifecycle实现。

玩转Spring生命周期之Lifecycle

然后就可以引用了

上面可以发现,这种方式其实可以对初始化的Bean做一些其他预初始化 *** 作,简化 *** 作。

例如 redis默认的RedisTemplate 的key是查看不友好的,可以采用转码的方式来把key和value的值变为可读的形式

1场景描述

业务系统中,配置文件不同,使用的业务逻辑也不同。我们可以使用模板方法模式把业务分成多个service。如下图

2ConditionalOnProperty源码说明

3如何使用

AbstractServiceImpl1-- 默认使用的方法

UserServiceImpl1--

UserServiceImpl2--

使用时,直接注入service,会根据配置文件来选择哪个service生效

4上面是针对一个配置项,如果有多个配置项,可以使用@ConditionalOnExpression,来根据表达式来选择使用哪个service

ConditionalOnExpression 源码说明

使用起来也比较方便

@ConditionalOnExpression("!${sencecascadeenable:false} && ${sencecascadetest:0} == 2")

以上就是关于SpringBoot2.x基础篇—Bean的生命周期方法(实现Lifecycle接口)全部的内容,包括:SpringBoot2.x基础篇—Bean的生命周期方法(实现Lifecycle接口)、springboot 装配bean的方式、springboot 根据配置文件的不同,选择注入不同的bean等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9685584.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存