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