您好,登錄后才能下訂單哦!
springboot如何實現增加@ComponentScan后本地bean無加載,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
springboot需要加載jar包里的bean時,一般是使用注解@ComponentScan(basePackages = {"com.test.http", "com.test.client"})來實現,但@ComponentScan在使用時有些注意事項需要小心
由于需要用到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 { }
再次啟動依然報同一個錯誤!
從現象來看,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的包順序不受影響的哦??
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。