Spring @Autowired 、@Inject、@Resource三者區別

一、@Autowired

1、@Autowired是spring自帶的註解,通過‘AutowiredAnnotationBeanPostProcessor’ 類實現的依賴注入;

2、@Autowired是根據類型進行自動裝配的,如果需要按名稱進行裝配,則需要配合@Qualifier;

3、@Autowired有個屬性爲required,可以配置爲false,如果配置爲false之後,當沒有找到相應bean的時候,系統不會拋錯;

4、@Autowired可以作用在變量、setter方法、構造函數上。

a、將@autowored寫在被注入的成員變量上,就不用再xml文件中配置了,在程序中去掉相應的setter和getter方法

b、還可以寫在構造方法上、setter方法上

c、@Qualifier

@Qualifier("XXX") 中的 XX是 Bean 的名稱,所以 @Autowired 和 @Qualifier 結合使用時,自動注入的策略就從 byType 轉變成 byName 了。不過需要注意的是@Autowired 可以對成員變量、方法以及構造函數進行註釋,而 @Qualifier 的標註對象是成員變量、方法入參、構造函數入參

二、@Inject

1、@Inject是JSR330 (Dependency Injection for Java)中的規範,需要導入javax.inject.Inject;實現注入。

2、@Inject是根據類型進行自動裝配的,如果需要按名稱進行裝配,則需要配合@Named;

3、@Inject可以作用在變量、setter方法、構造函數上。

a、將@Inject可以作用在變量、setter方法、構造函數上,和@Autowired一樣

b、@Named

@Named("XXX") 中的 XX是 Bean 的名稱,所以 @Inject和 @Named結合使用時,自動注入的策略就從 byType 轉變成 byName 了。

三、@Resource

1、@Resource是JSR250規範的實現,需要導入javax.annotation實現注入。

2、@Resource是根據名稱進行自動裝配的,一般會指定一個name屬性

3、@Resource可以作用在變量、setter方法上。

a、@Resource實例

總結:

1、@Autowired是spring自帶的,@Inject是JSR330規範實現的,@Resource是JSR250規範實現的,需要導入不同的包

2、@Autowired、@Inject用法基本一樣,不同的是@Autowired有一個request屬性

3、@Autowired、@Inject是默認按照類型匹配的,@Resource是按照名稱匹配的

4、@Autowired如果需要按照名稱匹配需要和@Qualifier一起使用,@Inject和@Name一起使用

 

發佈了191 篇原創文章 · 獲贊 97 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章