springboot增加@ComponentScan后本地bean无加载

1、前言

springboot需要加载jar包里的bean时,一般是使用注解@ComponentScan(basePackages = {"com.test.http", "com.test.client"})来实现,但@ComponentScan在使用时有些注意事项需要小心

2、背景

由于需要用到springcloud feign做RPC调用,需要注入client的api,因此我加了@ComponentScan扫描client所在的包路径,结果在启动时报错:

Description:

Parameter 0 of method indicatorServiceApi in com.client.ServiceApiConfig required a bean of type 'feign.codec.Decoder' that could not be found.

反序列类找不到可使用对象,然后我就加了个FeignConfig加载默认的feign配置

@Configuration
@Import(FeignClientsConfiguration.class)
     public class FeignConfig {
}

再次启动依然报同一个错误!

3、排查原因

从现象来看,client.ServiceApiConfig至少是在FeignConfig之前初始化的,为何不是先初始化本地么?这个还真不是

回头看看@ComponentScan的注释:

* <p>Either {@link #basePackageClasses} or {@link #basePackages} (or its alias
* {@link #value}) may be specified to define specific packages to scan. If specific
* packages are not defined, scanning will occur from the package of the
* class that declares this annotation.

意思是如果没有定义packages,就从启动类的包路径开始。这就引含了一个意思: 如果有定义,启动类的包路径并不会自动添加进去!

再来看看上面的问题,原来启动类的包路径跟api的包不一样,导致spring只扫描了api的包路径,当然就找不到FeignConfig配置啦!将自身的包路径加到@ComponentScan里即可。

PS:@ComponentScan的包顺序不受影响的哦〜〜

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值