@Autowired 和 @ Resource 的區別

spring

都是用來裝配Bean的註解。均可以寫在字段上,或寫在setter方法上。ui

@Autowired註解是按照類型(byType)裝配依賴對象,默認狀況下它要求依賴對象必須存在,若是容許null值,能夠設置它的required屬性爲false。若是咱們想使用按照名稱(byName)來裝配,能夠結合@Qualifier註解一塊兒使用。如:this

publicclass TrayServiceImpl {3d

    // 下面兩種@Autowired只要使用一種便可 對象

    //這種方法是隻按照byType注入class

  @Autowiredrequire

    private TrayDao trayDao;// 用於字段上 方法

    @Autowiredd3

    public void setTrayDao(TrayDao trayDao) {// 用於屬性的方法上異常

    this.trayDao = trayDao;

    }

}

或者

publicclass TrayServiceImpl {

//這種寫法是先byType 注入,若是是null值,在byName注入

@Autowired  @Qualifier("trayDao")

private TrayDao trayDao;

}

Autowried是Spring提供的註解,而Resource是J2EE提供的註解。Resource有兩個屬性,name和type,resource會把name做爲bean的名稱,type做爲bean的類型。

使用@Resource 註解轉配Bean的順序:

1.若是同時指定了name和type,則從Spring上下文中找到惟一匹配的bean進行裝配,找不到則拋出異常(異常信息:找不到"bean"的聲明);

2.若是指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常;

3.若是指定了type,則從上下文中找到類型匹配的惟一bean進行裝配,找不到或者找到多個,都會拋出異常;

4.若是既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配(見2);若是沒有匹配,則回退爲一個原始類型(TrayDao )進行匹配,若是匹配則自動裝配;

ps:我的推薦使用@Resource註解,這個註解是屬於J2EE的,減小了與spring的耦合。

做者:白首傾蓋 連接:https://www.jianshu.com/p/5c5715d4ed3d 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
相關文章
相關標籤/搜索