Spring系列(十):@Autowired 和@Resource注解用法介紹
今天給大家分享Spring屬性注入的注解@Autowired 和@Resource介,希望對大家能有所幫助!? ? ? ?

?? ? ? ?
一、@Autowired 注解
1.1 介紹
@Autowired注解默認按照類型容器中找到對應(yīng)的組件:annotationContext.getBean(Person.class) 。
如果找到多個相同類型的組件,再根據(jù)屬性的名稱作為組件id去spring容器中找:annotationContext.getBean("person") 。
required:屬性默認為true,表示自動注入的Bean必須能夠找到,否則就會報null,設(shè)置為false,可以在Spring容器自動注入Bean找不到的話,返回null,不會報錯。
@Autowired可以和@Qualifie注解使用,用來指定注入的組件id,而不是使用屬性名。
@Autowired默認先按Type進行匹配,如果找到多個bean,則又會按照組件id方式進行匹配(需要@Qualifier("name")配合)。
1.2 作用
@Autowired表示被修飾的Java類需要注入對象,spring會自動掃描所有被@Autowired標注的類,然后根據(jù)在IOC容器中找到匹配的類進行自動注入。
二、@Resource 注解
2.1 介紹
@Resource 注解和@Autowired注解作用比較相似,也是實現(xiàn)組件的自動注入。它是JAVA2EE提供的注解,使用的時候需要導(dǎo)入javax.annotation.Resourc 。@Resource默認按照組件id自動注入,如果按照默認組件id找不到bean時,再按照類型去匹配。示例:public class UseInforDao {? ?@Resource(name ="person",type = Person.class)? ?private UserInfo userInfo;}
2.2 @Resource 自動注入順序
同時指定了組件id和type,則從Spring上下文中找到唯一匹配的bean進行注入,找不到則拋出異常。
指定了組件id,則從上下文中查找名稱(id)匹配的bean進行注入,找不到則拋出異常。
指定了type,則從上下文中找到類型匹配的唯一bean進行注入,如果找不到或者找到多個,都會拋出異常。
既沒有指定組件ide,又沒有指定type,則自動按照組件id方式進行注入;找不到的話,則回退為一個原始類型進行匹配,如果匹配則自動注入。
三、@Autowired 和 @Resource區(qū)別
3.1 相同點:
兩者都是實現(xiàn)Bean的注入功能
兩者都可以寫在屬性字段或者setter方法上。兩者如果都寫在屬性字段上,setter方法可以省略掉。
3.2 不同點:
@Autowired屬于Spring注解,@Resource 油JAVA2EE提供,需要導(dǎo)入包javax.annotation.Resource。
@Autowired默認按Type注入,組件id的方式需要與@Qualifier("name")配合使用;@Resource同時支持Type和組件id方式注入,默認按組件id注入。
@Autowired只包含一個參數(shù):required,標明是否開啟自動注入,默認是true。而@Resource包含七個參數(shù),最重要的兩個參數(shù)是:name 和 type,用來指定注入的方式。
@Autowired可以作用在:構(gòu)造器、方法、參數(shù)、成員變量和注解上,@Resource可以作用在:類、成員變量和方法上。