annotation之@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一起使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM