【无标题】

@ConditionalOnMissingBean等注解在自定义starter中失效的问题


最近自定义了一个连接SAP的spring-boot-starter,里面会根据配置文件中的SAP连接参数创建DestinationDataProvider,在SapAutoConfiguration自动配置类中使用了@ConditionalOnMissingBean注解,当不存在对应的bean时才去创建bean,但是在使用的过程中发现了一个问题:在我的项目中有使用Spring Boot DevTools,我修改代码后会去热加载和快速重启,然后发现他还会去创建DestinationDataProvider的bean,疑惑了很久,然后在网上查资料。都试过了,最后还是不行,没办法,只能花点时间去跟源码,跟到最后发现了问题。
建议先看下这篇文章。
链接: link

Spring Boot DevTools的类加载器

Spring Boot DevTools 使用的是RestartClassLoader 加载器,一开始不注意,一直跟代码往下走,走到最后发现找不到类。跟了好多遍,最后突然想到这个不是JDK的类加载器,我看了下这个类加载器的结构,发现packages属性的值。
图片:
在这里插入图片描述
这里的包名都是com.stitch开头的。再看下我的starter的报名
在这里插入图片描述

我需要用来判断的类的包名是com.q 开头的,所以RestartClassLoader 类加载器是找不到这个类的。
找不到这个类的时候@ConditionalOnMissingBean就判断通过了,所以会去重新创建bean。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值