注入jar包裡的物件,用@autowired的例項
注入的jar包如果不能直接使用 @autowired 來使用,可以採用如下方法:
@Configuration public class DemoConfiguration { @Bean public Demo demo() { return new Demo(); //該物件為Jar包物件 } }
補充知識:引入第三方包 @Autowired Spring注入失敗解決方案
一、問題背景
開發工程中,我負責的微服務需要依賴中臺服務層,在呼叫該服務的功能介面時,@Autowired 注入方式啟動報錯:
Description:
Field clientRouter in com.baiwang.cloud.spush.client.SPushClient required a bean of type 'com.baiwang.cloud.spush.client.router.IClientRouter' that could not be found.
Action:
Consider defining a bean of type 'com.baiwang.cloud.spush.client.router.IClientRouter' in your configuration.
二、問題解決
1、@ComponentScan用來指定掃描的組建所在的包路徑或class檔案。在不指定引數的時候,SpringBoot的@ComponentScan預設會掃描同目錄及同目錄下級目錄的類檔案。所以,Spring注入第三方包,需要通過@ComponentScan 掃描需要注入的包。
第一個包名是當前服務的頂層目錄包,第二個是依賴的第三方包已經成功注入。既然已經可以使用,所以我就模仿著添加了注入的包。
2、注入了新的包之後,啟動依然報了錯
同樣的錯誤,根據錯誤我又找到對應的類,發現了上邊掃描的路徑只是interface層
於是我找到了實現的service層的包路徑,同樣注入了進去
這次啟動又報了另一個錯誤
3、Field redisTemplate in com.baiwang.media.basic.cache.config.RedisConfig required a single bean,but 2 were found:
這個錯誤根據提示仔細想了想,應該就可以定位到了,RedisConfig這個類注入了RedisTemplate,Redis這個類使用頻率還是挺多的,還有@Autowired是按照型別來注入的,所以上邊掃描的包RedisTemplate這個型別存了兩份。
由問題找問題,基礎不牢固就要全部靠百度。@Qualifier @Primary這兩個註解,@Qualifier註解的用處:當一個介面有多個實現的時候,為了指名具體呼叫哪個類的實現,可以指定名稱,以名稱的方式注入。用@Primary註解的Bean就要優先於其他的Bean,更多應用的是Service,這裡使用@Qualifier就可以了
最後不出所料,成功啟動!
三、最後
這樣的掃描方式會顯得很冗餘,就簡化了注入的包的頂層目錄。
最後就是這樣了,同樣也要檢查其他型別的注入是不是也會衝突!!!
還有,依賴第三方注入還需要這個:
以上這篇注入jar包裡的物件,用@autowired的例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。