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

