回覆列表
  • 1 # java架構設計

    我們先來看看什麼是Spring自動裝配的歧義性:

    當定義的多個bean都是繼承同一個介面的時候,使用@Autowired註解對介面進行注入的時候,會出現歧義性。因為Spring這時候不知道找哪個實現bean注入了。

    Talk is cheap,show me the code.來看下面這段程式碼:

    上面的程式碼就是典型的Spring自動裝配的歧義性,如果在idea編輯器下編寫,會發現他會提示報錯:

    看到這,我相信大家都已經明白了什麼是Spring自動裝配的歧義性。

    解決自動裝配的歧義問題

    那實際專案開發中真有這種情況該如何解決呢?

    採用@Primary註解到其中一個類,這樣等於是給實現了CarService介面的指定bean定義為首選類,這樣Spring預設就會注入這個首選類,當然首選類不可以同時標記兩個以上。

    那麼問題來了,如果我不想注入這個首選類,我想使用另外一個bean怎麼辦呢?

    給這個bean起一個別名:

    大家是不是知道了如何解決多實現類自動裝配的問題?是不是很簡單呢?這裡大家是不是發現使用@Resource註解可以很好的解決上面的問題?經常寫程式碼的人一定知道了解決的辦法了:
  • 2 # 程式猿W
    @AutoWired的使用

    ① 優先使用byType,而後是byName

    ② 在多個實現類的 時候,byType的方式不再是唯一,而需要透過byName的方式注入,而這個name就是根據變數名來的。

    透過實現XXXAware介面來實現,比如ApplicationContext透過@Profile註解 來根據環境來啟用標識不同的Bean

    ① @Profile標識在類上,那麼只有當前環境匹配,整個配置類才會生效

    ② @Profile標識在Bean上 ,那麼只有當前環境的Bean才會被啟用

  • 中秋節和大豐收的關聯?
  • 為何剛剛七月,商場就開始賣秋冬季衣服了?