天天看點

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方法

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

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

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

c、@Qualifier

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

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

二、@Inject

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

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

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

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

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

b、@Named

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

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

三、@Resource

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

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

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

a、@Resource執行個體

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

總結:

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

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

3、@Autowired、@Inject是預設按照類型比對的,@Resource是按照名稱比對的

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

繼續閱讀