- @ConditionalOnMissingBean在很多spring框架里都得到很广泛的应用,如spring-boot-starter-security,spring-cloud-starter-oauth2中的应用 。
- 注意@ConditionalOnMissingBean这种注解需要添加在@Bean上面,而不是添加到@Service,@Component等上面 。
可扩展性上的应用,通过一个例子来说明问题,以讲故事的方式来阐述给大家听:- 从前,有一个接口,它提供一个hello方法
public interface MissingBean {void hello();}- 它有一个默认的实现,当没有其它实现时,就用这个默认的实现
public class DefaultMissingBean implements MissingBean {@Overridepublic void hello() {System.out.println("default MissingBean");}}- 通过配置类,将MissingBean的默认bean注册到ioc容器中,并声明为
@ConditionalOnMissingBean,缺省的,默认的bean实例 。
@Configurationpublic class MissingBeanConfig {@Bean@ConditionalOnMissingBean(MissingBean.class)public MissingBean defaultMissingBean() {return new DefaultMissingBean();}}- 开发人员在程序中调用了MissingBean,并输出了默认的结果
@RunWith(SpringRunner.class)@SpringBootTest()public class ConditionalOnClassTest {@AutowiredMissingBean missingBean;/*** @ConditionalOnMissingBean.*/@Testpublic void onMissingBean() {missingBean.hello();}}
文章插图
- 在具体项目中,开发人员觉得默认的DefaultMissingBean实现不能满足自己的要求,这时,它会进行扩展,添加了第一版实现V1MissingBean
@Componentpublic class V1MissingBean implements MissingBean {@Overridepublic void hello() {System.out.println("v1 MissingBean");}}- 这时,程序中的代码引用是不需要修改的,还是上面的代码,我们看一下输出的结果,它将是v1版本的结果

文章插图
作者:仓储大叔,张占岭,
荣誉:微软MVP
QQ:853066980
支付宝扫一扫,为大叔打赏!
文章插图
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
