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的包順序不受影響的哦〜〜