Spring@Autowired與@Resource的區(qū)別有哪些
@Autowired與@Resource都是我們?nèi)粘i_發(fā)中常用的兩個(gè)注解,那么它們之間究竟有何區(qū)別呢?
開始講解之前我們首先要明白一點(diǎn),這個(gè)兩個(gè)注解都是用來完成組件的裝配的,即利用依賴注入(DI),完成對(duì)ioc容器當(dāng)中各個(gè)組件之間依賴的裝配賦值。
@Autowired注解
來源:@Autowired為Spring提供的注解,需要導(dǎo)入包org.springframework.beans.factory.annotation.Autowired。
說明:@Autowired采取的默認(rèn)策略為按照類型注入(by-type)。要求容器中一定要有這個(gè)類型的對(duì)象,如果沒有將會(huì)報(bào)錯(cuò),拋出異常。也可以通過設(shè)置可以@Autowired(required = false),來告訴容器,如果沒有可以不注入。
示例:
public class StudentController {
@Autowired
private StudentServer studentServer;
}
如上代碼所示,這樣裝配會(huì)去spring容器中找到類型為StudentServer的類,然后將其注入進(jìn)來。這樣會(huì)產(chǎn)生一個(gè)問題,當(dāng)容器中有多個(gè)相同類型的對(duì)象,會(huì)造成無法選擇具體注入哪一個(gè)的情況從而導(dǎo)致報(bào)錯(cuò),這個(gè)時(shí)候我們可以通過@Qualifier("beanname"),來指定裝配哪個(gè)對(duì)象。
public class StudentController {
@Autowired
@Qualifier(name="studentServer")
private StudentServer studentServer;
}
@Qualifier注解會(huì)告訴spring去裝配StudentServer對(duì)象。這個(gè)時(shí)候我們就可以成功注入正確的對(duì)象了。
@Resource注解
來源:@Resource注解由J2EE提供,需要導(dǎo)入包javax.annotation.Resource。
說明:@Resource可以設(shè)置by-name(按名稱)和by-type(按類型)來進(jìn)行自動(dòng)裝配。如果沒指定則默認(rèn)按照ByName自動(dòng)注入。
示例:
public class StudentController {
@Resource
private StudentServer studentServer;
}
沒有指定name,又沒有指定type,該注解會(huì)自動(dòng)按照by-name方式進(jìn)行裝配,如果匹配則自動(dòng)裝配。如果沒有匹配,則按照by-type進(jìn)行查找,如果都沒查找到,那么則拋出異常。
public class StudentController {
@Resource(name="studentServer")
private StudentServer studentServer;
}
指定了name,則從上下文中查找名稱(id)匹配的bean進(jìn)行裝配,找不到則拋出異常。
public class StudentController {
@Resource(type="StudentServer")
private StudentServer studentServer;
}
指定了type,則從上下文中找到類似匹配的唯一bean進(jìn)行裝配,找不到或是找到多個(gè),都會(huì)拋出異常。
public class StudentController { @Resource(name="studentServer",type="StudentServer") private StudentServer studentServer; }public class StudentController {
@Resource(name="studentServer",type="StudentServer")
private StudentServer studentServer;
}
同時(shí)指定了name和type,則從Spring上下文中找到唯一匹配的bean進(jìn)行裝配,找不到則拋出異常。
總結(jié)
@Autowired是Spring的注解通過類型(type)來實(shí)現(xiàn)裝配Bean,也可以通過名稱(name)來裝配Bean(需要配合@Qualifier(“beanname”)使用)。依賴對(duì)象必須存在,如果要允許null值,可以設(shè)置它的required屬性為false @Autowired(required=false)。
@Resource是J2EE的注解是Java自已的東西使用@Resource可以減少代碼和Spring之間的耦合。它可以通過by-type來實(shí)現(xiàn)裝配Bean,也可以by-name進(jìn)行裝配,如果指定了則按照指定的進(jìn)行裝配,如果都沒指定的話先by-name 后by-type 也可以同時(shí)指定by-name與by-type。
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
- Spring中@Autowired @Resource @Inject三個(gè)注解有什么區(qū)別
- 淺談Spring框架中@Autowired和@Resource的區(qū)別
- 一文搞懂Spring中@Autowired和@Resource的區(qū)別
- Spring中@Autowired與@Resource的區(qū)別詳析
- Spring注解@Resource和@Autowired區(qū)別對(duì)比詳解
- 詳解Spring注解--@Autowired、@Resource和@Service
- Spring框架中 @Autowired 和 @Resource 注解的區(qū)別
- 深入了解Spring中的@Autowired和@Resource注解
相關(guān)文章
spring boot過濾器FilterRegistrationBean實(shí)現(xiàn)方式
這篇文章主要介紹了spring boot過濾器FilterRegistrationBean實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
list,set,map,數(shù)組之間的相互轉(zhuǎn)換詳細(xì)解析
以下是對(duì)Java中l(wèi)ist,set,map,數(shù)組之間的相互轉(zhuǎn)換進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-09-09
IDEA實(shí)現(xiàn) springmvc的簡(jiǎn)單注冊(cè)登錄功能的示例代碼
這篇文章主要介紹了IDEA實(shí)現(xiàn) springmvc的簡(jiǎn)單注冊(cè)登錄功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
Java調(diào)用CXF WebService接口的兩種方式實(shí)例
今天小編就為大家分享一篇關(guān)于Java調(diào)用CXF WebService接口的兩種方式實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
spring boot異步(Async)任務(wù)調(diào)度實(shí)現(xiàn)方法
在沒有使用spring boot之前,我們的做法是在配置文件中定義一個(gè)任務(wù)池,然后將@Async注解的任務(wù)丟到任務(wù)池中去執(zhí)行,那么在spring boot中,怎么來實(shí)現(xiàn)異步任務(wù)的調(diào)用了,下面通過本文給大家講解,需要的朋友參考下2018-02-02

