@Resource
JDK默認(rèn)提供的注解,屬于JSR-250規(guī)范的一部分(其他的還有@PostConstruce/@PreDestroy等),可以標(biāo)記在屬性或者Setter上偏窝,Spring通過(guò)CommonAnnotationBeanPostProcessor來(lái)處理該注解,在實(shí)現(xiàn)依賴注入的時(shí)候的匹配順序是:
- 基于名稱
- 基于類型
- 基于@Qualifier
@Inject
屬于JSR-330提供的注解,該規(guī)范主要提供Java注入相關(guān)的注解雹嗦,需要手動(dòng)引入:
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
Spring通過(guò)AutowiredAnnotationBeanPostProcessor來(lái)處理該注解范舀,處理順序是:
- 基于類型
- 基于@Qualifier
- 基于名稱和@Named
@Autowired
Spring提供的注解,功能與@Inject相似了罪,也是通過(guò)AutowiredAnnotationBeanPostProcessor處理锭环,處理的順序同樣是:
- 基于類型
- 基于@Qualifier
- 基于名稱
總結(jié)
@Resource和@Inject都是Java平臺(tái)提供的注解,主要用于JavaEE泊藕,而之所以能在Spring中生效是由于Spring實(shí)現(xiàn)了相關(guān)的規(guī)范辅辩,而@Autowired是Spring提供注解,使用上只要明白其注入順序娃圆,正確注入使用即可玫锋,沒(méi)有過(guò)多的區(qū)別,安裝自己的使用習(xí)慣或者團(tuán)隊(duì)的風(fēng)格選擇使用即可讼呢。