天天看點

@Resource和@Autowired的差別及補充

參考博文:

<博文連結:https://www.cnblogs.com/fengli9998/p/7472247.html>

這裡面已經已經寫的很清楚了。

然後我補充下自己的。

當一個接口有多個實作類的時候,那麼注入的時候它會選擇某一個類來注入嗎?

答案肯定是不可能的,這時候我們應該如何解決呢。

  1. 首先,當我們使用@Autowired注解來注入的時候,它是預設按照類型來注入的,然而這個接口卻有兩個實作類,它并不知道選擇哪一個類型,是以我們需要結合@Qualifier按照名稱來完成注入,而@Qualifier中value屬性值就是實作類的名稱。當然除了這種方法,我們也可以在某一個實作類上加入@Primary注解,來表示哪一個實作類被注入的時候優先注入。
  2. 當我們使用@Resource注解來注入時,@Resource它是預設按照名稱來注入的(當我們既沒有指定按名稱注入或者指定按類型注入的時候)。這時候該如何解決注入呢?我們仍然可以使用這個注解,不過就要指定按照名稱或者類型來注入了。

    (1)按照名稱來注入,需要指定@Resource的name屬性,屬性值是其中某一個實作類的名稱.ex:@Resource(name=“HelloServiceImpl”)

    (2)按照類型來注入,需要指定@Resource的type屬性,屬性值是其中某一個實作類的位元組碼檔案,ex:@Resource(type=HelloServiceImpl.class)