1. 程式人生 > >@Resource和@Autowire的區別

@Resource和@Autowire的區別

@Resource@Autowired

  • @Resource@Autowired都可以用來裝配bean,都可以用於欄位或setter方法。
  • @Autowired預設按型別裝配,預設情況下必須要求依賴物件必須存在,如果要允許null值,可以設定它的required屬性為false。
    -@Resource預設按名稱裝配,當找不到與名稱匹配的bean時才按照型別進行裝配。名稱可以通過name屬性指定,如果沒有指定name屬性,當註解寫在欄位上時,預設取欄位名,當註解寫在setter方法上時,預設取屬性名進行裝配。

    注意:如果name屬性一旦指定,就只會按照名稱進行裝配。

  • @Autowire

    @Qualifier配合使用效果和@Resource一樣:

    @Autowired(required = false) @Qualifier("example")
    private Example example;
    
    @Resource(name = "example")
    private Example example;
  • @Resource裝配順序
    1. 如果同時指定name和type,則從容器中查詢唯一匹配的bean裝配,找不到則丟擲異常
    2. 如果指定name屬性,則從容器中查詢名稱匹配的bean裝配,找不到則丟擲異常
    3. 如果指定type屬性,則從容器中查詢型別唯一匹配的bean裝配,找不到或者找到多個丟擲異常
    4. 如果都不指定,則自動按照byName方式裝配,如果沒有匹配,則回退一個原始型別進行匹配,如果匹配則自動裝配

簡要對比表格

註解對比 @Resource @Autowire
註解來源 JDK Spring
裝配方式 優先按名稱 優先按型別
屬性 name、type required