1. 程式人生 > 程式設計 >注入jar包裡的物件,用@autowired的例項

注入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.

注入jar包裡的物件,用@autowired的例項

二、問題解決

1、@ComponentScan用來指定掃描的組建所在的包路徑或class檔案。在不指定引數的時候,SpringBoot的@ComponentScan預設會掃描同目錄及同目錄下級目錄的類檔案。所以,Spring注入第三方包,需要通過@ComponentScan 掃描需要注入的包。

注入jar包裡的物件,用@autowired的例項

第一個包名是當前服務的頂層目錄包,第二個是依賴的第三方包已經成功注入。既然已經可以使用,所以我就模仿著添加了注入的包。

注入jar包裡的物件,用@autowired的例項

2、注入了新的包之後,啟動依然報了錯

注入jar包裡的物件,用@autowired的例項

同樣的錯誤,根據錯誤我又找到對應的類,發現了上邊掃描的路徑只是interface層

注入jar包裡的物件,用@autowired的例項

於是我找到了實現的service層的包路徑,同樣注入了進去

注入jar包裡的物件,用@autowired的例項

這次啟動又報了另一個錯誤

注入jar包裡的物件,用@autowired的例項

3、Field redisTemplate in com.baiwang.media.basic.cache.config.RedisConfig required a single bean,but 2 were found:

這個錯誤根據提示仔細想了想,應該就可以定位到了,RedisConfig這個類注入了RedisTemplate,Redis這個類使用頻率還是挺多的,還有@Autowired是按照型別來注入的,所以上邊掃描的包RedisTemplate這個型別存了兩份。

注入jar包裡的物件,用@autowired的例項

由問題找問題,基礎不牢固就要全部靠百度。@Qualifier @Primary這兩個註解,@Qualifier註解的用處:當一個介面有多個實現的時候,為了指名具體呼叫哪個類的實現,可以指定名稱,以名稱的方式注入。用@Primary註解的Bean就要優先於其他的Bean,更多應用的是Service,這裡使用@Qualifier就可以了

注入jar包裡的物件,用@autowired的例項

最後不出所料,成功啟動!

注入jar包裡的物件,用@autowired的例項

三、最後

注入jar包裡的物件,用@autowired的例項

這樣的掃描方式會顯得很冗餘,就簡化了注入的包的頂層目錄。

注入jar包裡的物件,用@autowired的例項

最後就是這樣了,同樣也要檢查其他型別的注入是不是也會衝突!!!

還有,依賴第三方注入還需要這個:

注入jar包裡的物件,用@autowired的例項

以上這篇注入jar包裡的物件,用@autowired的例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。