@Autowired和@Resource
阿新 • • 發佈:2022-04-01
@Autowire自動注入,將元件注入到本類中進行後續呼叫。
@Resource也可以將元件拿到,區別如下:
@Resource
@Resource有兩個常用屬性name、type,所以分4種情況
指定name和type:通過name找到唯一的bean,找不到丟擲異常;如果type和欄位型別不一致,也會丟擲異常
指定name:通過name找到唯一的bean,找不到丟擲異常
指定type:通過tpye找到唯一的bean,如果不唯一,則丟擲異常:NoUniqueBeanDefinitionException
都不指定:通過欄位名作為key去查詢,找到則賦值;找不到則再通過欄位型別去查詢,如果不唯一,則丟擲異常:NoUniqueBeanDefinitionException
@Autowired
@Autowired只有一個屬性required,預設值為true,為true時,找不到就拋異常,為false時,找不到就賦值為null
@Autowired按型別查詢,如果該型別的bean不唯一,則丟擲異常;可通過組合註解解決@Autowired()@Qualifier("baseDao")
相同點
Spring都支援
都可以作用在欄位和setter方法上
不同點
1.Resource是JDK提供的,而Autowired是Spring提供的
2.Resource不允許找不到bean的情況,而Autowired允許(@Autowired(required = false))
3.指定name的方式不一樣,@Resource(name = "baseDao"),@Autowired()@Qualifier("baseDao")
4.Resource預設通過name查詢,而Autowired預設通過type查詢