回覆列表
-
1 # java架構設計
-
2 # 程式猿W@AutoWired的使用
① 優先使用byType,而後是byName
② 在多個實現類的 時候,byType的方式不再是唯一,而需要透過byName的方式注入,而這個name就是根據變數名來的。
透過實現XXXAware介面來實現,比如ApplicationContext透過@Profile註解 來根據環境來啟用標識不同的Bean① @Profile標識在類上,那麼只有當前環境匹配,整個配置類才會生效
② @Profile標識在Bean上 ,那麼只有當前環境的Bean才會被啟用
我們先來看看什麼是Spring自動裝配的歧義性:
當定義的多個bean都是繼承同一個介面的時候,使用@Autowired註解對介面進行注入的時候,會出現歧義性。因為Spring這時候不知道找哪個實現bean注入了。
Talk is cheap,show me the code.來看下面這段程式碼:上面的程式碼就是典型的Spring自動裝配的歧義性,如果在idea編輯器下編寫,會發現他會提示報錯:
看到這,我相信大家都已經明白了什麼是Spring自動裝配的歧義性。
解決自動裝配的歧義問題那實際專案開發中真有這種情況該如何解決呢?
採用@Primary註解到其中一個類,這樣等於是給實現了CarService介面的指定bean定義為首選類,這樣Spring預設就會注入這個首選類,當然首選類不可以同時標記兩個以上。
那麼問題來了,如果我不想注入這個首選類,我想使用另外一個bean怎麼辦呢?
給這個bean起一個別名:
大家是不是知道了如何解決多實現類自動裝配的問題?是不是很簡單呢?這裡大家是不是發現使用@Resource註解可以很好的解決上面的問題?經常寫程式碼的人一定知道了解決的辦法了: