@Resource和@Autowired都是做bean的注入時使用,其實@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要匯入,但是Spring支持該注解的注入,
1、共同點
兩者都可以寫在欄位和setter方法上,兩者如果都寫在欄位上,那么就不需要再寫setter方法,
2、不同點
(1)@Autowired
@Autowired是Spring提供的注解,需要匯入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入,
@Autowired注解是按照型別(byType)裝配依賴物件,默認情況下它要求依賴物件必須存在,如果允許null值,可以設定它的required屬性為false,如果我們想使用按照名稱(byName)來裝配,可以結合@Qualifier注解一起使用,如下:
public class TestServiceImpl {
@Autowired
@Qualifier("userService")
private UserService userService;
}
@Resource
@Resource默認按照ByName自動注入,由J2EE提供,需要匯入包javax.annotation.Resource,@Resource有兩個重要的屬性:name和type,而Spring將@Resource注解的name屬性決議為bean的名字,而type屬性則決議為bean的型別,
@Autowired功能雖說非常強大,但是也有些不足之處,比如:比如它跟spring強耦合了,如果換成了JFinal等其他框架,功能就會失效,而@Resource是JSR-250提供的,它是Java標準,絕大部分框架都支持,
除此之外,有些場景使用@Autowired無法滿足的要求,改成@Resource卻能解決問題,接下來,我們重點看看@Autowired和@Resource的區別,
@Autowired默認按byType自動裝配,而@Resource默認byName自動裝配,
@Autowired只包含一個引數:required,表示是否開啟自動準入,默認是true,而@Resource包含七個引數,其中最重要的兩個引數是:name 和 type,
@Autowired如果要使用byName,需要使用@Qualifier一起配合,而@Resource如果指定了name,則用byName自動裝配,如果指定了type,則用byType自動裝配,
@Autowired能夠用在:構造器、方法、引數、成員變數和注解上,而@Resource能用在:類、成員變數和方法上,
@Autowired是spring定義的注解,而@Resource是JSR-250定義的注解,
此外,它們的裝配順序不同,還有就是在idea中 對@Autowired注解無法去識別到bean物件,提示波浪線警告,@Resource可以避免,
圖解@Autowired的裝配順序

@Resource的裝配順序如下:
如果同時指定了name和type:

如果指定了name:

如果指定了type:

如果既沒有指定name,也沒有指定type:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/501240.html
標籤:Java
上一篇:面向物件ooDay3
