天天看點

@Resource和@Autowired差別

【參考】https://blog.csdn.net/weixin_40423597/article/details/80643990

@Autowired 預設按照類型裝配,預設情況下必須要求依賴對象必須存在,如果允許null值,可以設定它的required屬性為false,如果我們想用名稱進行裝配,則需要使用    @Qualifier("name")

@Resource 預設按照名稱進行裝配,名稱可以通過name屬性值進行指定,如果沒有指定name屬性,當注解寫在字段上時,預設取字段名進行安裝名稱查找,如果注解寫在 setter 方法上預設取屬性名進行裝配。當找不到與名稱比對的bean時才會按照類型進行裝配。但是需要注意的是,如果name屬性一旦指定,就隻會按照名稱進行裝配

@Resource裝配順序

  1. 如果同時指定了name和type,則從Spring上下文中找到唯一比對的bean進行裝配,找不到則抛出異常

  2. 如果指定了name,則從上下文中查找名稱(id)比對的bean進行裝配,找不到則抛出異常

  3. 如果指定了type,則從上下文中找到類型比對的唯一bean進行裝配,找不到或找到多個,都會抛出異常

  4.如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有裝配,則回退為一個原始類型進行比對