一、@Autowired 1、@Autowired是spring自帶的注解,通過(guò)‘AutowiredAnnotationBeanPostProcessor’ 類實(shí)現(xiàn)的依賴注入; 2、@Autowired是根據(jù)類型進(jìn)行自動(dòng)裝配的,如果需要按名稱進(jìn)行裝配,則需要配合@Qualifier; 3、@Autowired有個(gè)屬性為required,可以配置為false,如果配置為false之后,當(dāng)沒(méi)有找到相應(yīng)bean的時(shí)候,系統(tǒng)不會(huì)拋錯(cuò); 4、@Autowired可以作用在變量、setter方法、構(gòu)造函數(shù)上。
a、將@autowored寫在被注入的成員變量上,就不用再xml文件中配置了,在程序中去掉相應(yīng)的setter和getter方法,
b、還可以寫在構(gòu)造方法上、setter方法上
c、@Qualifier @Qualifier("XXX") 中的 XX是 Bean 的名稱,所以 @Autowired 和 @Qualifier 結(jié)合使用時(shí),自動(dòng)注入的策略就從 byType 轉(zhuǎn)變成 byName 了。 不過(guò)需要注意的是@Autowired 可以對(duì)成員變量、方法以及構(gòu)造函數(shù)進(jìn)行注釋,而 @Qualifier 的標(biāo)注對(duì)象是成員變量、方法入?yún)?/strong>、構(gòu)造函數(shù)入?yún)?/strong>。
二、@Inject 1、@Inject是JSR330 (Dependency Injection for Java)中的規(guī)范,需要導(dǎo)入javax.inject.Inject;實(shí)現(xiàn)注入。 2、@Inject是根據(jù)類型進(jìn)行自動(dòng)裝配的,如果需要按名稱進(jìn)行裝配,則需要配合@Named; 3、@Inject可以作用在變量、setter方法、構(gòu)造函數(shù)上。
a、將@Inject可以作用在變量、setter方法、構(gòu)造函數(shù)上,和@Autowired一樣
b、@Named @Named("XXX") 中的 XX是 Bean 的名稱,所以 @Inject和 @Named結(jié)合使用時(shí),自動(dòng)注入的策略就從 byType 轉(zhuǎn)變成 byName 了。
三、@Resource 1、@Resource是JSR250規(guī)范的實(shí)現(xiàn),需要導(dǎo)入javax.annotation實(shí)現(xiàn)注入。 2、@Resource是根據(jù)名稱進(jìn)行自動(dòng)裝配的,一般會(huì)指定一個(gè)name屬性 3、@Resource可以作用在變量、setter方法上。
a、@Resource實(shí)例
總結(jié): 1、@Autowired是spring自帶的,@Inject是JSR330規(guī)范實(shí)現(xiàn)的,@Resource是JSR250規(guī)范實(shí)現(xiàn)的,需要導(dǎo)入不同的包 2、@Autowired、@Inject用法基本一樣,不同的是@Autowired有一個(gè)request屬性 3、@Autowired、@Inject是默認(rèn)按照類型匹配的,@Resource是按照名稱匹配的 4、@Autowired如果需要按照名稱匹配需要和@Qualifier一起使用,@Inject和@Name一起使用
|
|
來(lái)自: liang1234_ > 《spring注解》