springboot增長@ComponentScan後本地bean無加載

一、前言

springboot須要加載jar包裏的bean時,通常是使用註解@ComponentScan(basePackages = {"com.test.http", "com.test.client"})來實現,但@ComponentScan在使用時有些注意事項須要當心java

二、背景

因爲須要用到springcloud feign作RPC調用,須要注入client的api,所以我加了@ComponentScan掃描client所在的包路徑,結果在啓動時報錯:spring

Description:api

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

反序列類找不到可以使用對象,而後我就加了個FeignConfig加載默認的feign配置ui

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

再次啓動依然報同一個錯誤!this

三、排查緣由

從現象來看,client.ServiceApiConfig至少是在FeignConfig以前初始化的,爲什麼不是先初始化本地麼?這個還真不是spa

回頭看看@ComponentScan的註釋:code

* <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裏便可。ip

PS:@ComponentScan的包順序不受影響的哦〜〜

相關文章
相關標籤/搜索