深入了解Spring中的@Autowired和@Resource注解
@Resource和@Autowired是Spring Framework中兩種常用的注入方式,它們的作用是在Spring容器中自動裝配Bean對象.
@Autowired
@Autowired是Spring Framework提供的注解,它也可以實現(xiàn)自動裝配Bean對象.
@RestController
public class DemoController {
/**
* 下面兩種@Autowired使用一種即可
*/
@Autowired
DemoService demoService;
@Autowired
public void setDemoService(DemoService demoService) {
this.demoService = demoService;
}
}
@Autowired注解按照類型(byType)裝配依賴對象,默認情況下它要求依賴對象必須存在,如果允許null值,可以設置它的required屬性為false.如果我們想使用按照名稱(byName)來裝配,可以結合@Qualififier注解一起使用.如下:
@RestController
public class DemoController {
@Autowired
@Qualifier(value = "demoService")
DemoService demoService;
}
如果存在多個同類型的Bean對象,可以使用@Primary來指定一個默認的Bean對象,如下:
@RestController
public class DemoController {
@Autowired
DemoService demoService;
}
public interface DemoService {}
@Service
@Primary
public class DemoServiceImpl implements DemoService {}
@Service
public class DemoServiceImpl1 implements DemoService {}
@Resource
@Resource默認按照byName自動注入,由JavaEE5提供.@Resource有兩個重要的屬性:name和type,而Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類型,所以,如果要使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略.如果即不指定name也不指定type,這時將通過反射機制使用byName自動注入策略.
@RestController
public class DemoController {
/**
* 下面兩種@Resource使用一種即可
*/
@Resource
DemoService demoService;
@Resource
public void setDemoService(DemoService demoService) {
this.demoService = demoService;
}
}
@Resource裝配順序:
- 如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則拋異常
- 如果指定了name,則從上下文中查找名稱匹配的bean進行裝配,找不到則拋異常
- 如果指定了type,則從上下文中找到類型匹配的唯一bean進行裝配,找不到或找到多個,都會拋異常
- 如果即沒有指定type,也沒指定name,則自動按照byName方式進行裝配,如果匹配則自動裝配.如果沒有匹配,則回退為一個原始類型進行匹配.
總結
區(qū)別
- @Resource默認按名稱進行匹配,@Autowired默認按照類型進行匹配,但可以通過@Qualifier注解指定名稱進行匹配
- @Resource可以用在字段,setter方法和構造函數(shù)上,@Autowired可以用在字段,setter方法,構造函數(shù)和方法上
- @Resource不支持@Primary注解,@Autowired支持
- @Resource是JavaEE5提供的注解,而@Autowired是Spring Framework提供的注解
應用場景
根據(jù)以上區(qū)別,我們可以根據(jù)具體情況選擇使用@Resource或@Autowired.如果希望按照名稱進行匹配,并且不需要支持@Primary注解,可以選擇@Resource;如果希望按照類型進行匹配,并且需要支持@Primary注解,可以選擇@Autowried.根據(jù)具體情況選擇合適的注解來實現(xiàn)自動裝配
到此這篇關于深入了解Spring中的@Autowired和@Resource注解的文章就介紹到這了,更多相關Spring @Autowired和@Resource內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Spring中@Autowired @Resource @Inject三個注解有什么區(qū)別
- 淺談Spring框架中@Autowired和@Resource的區(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ū)別
相關文章
jenkins+maven+svn自動部署和發(fā)布的詳細圖文教程
Jenkins是一個開源的、可擴展的持續(xù)集成、交付、部署的基于web界面的平臺。這篇文章主要介紹了jenkins+maven+svn自動部署和發(fā)布的詳細圖文教程,需要的朋友可以參考下2020-09-09
Mybatis中通用Mapper的InsertList()用法
文章介紹了通用Mapper中的insertList()方法在批量新增時的使用方式,包括自增ID和自定義ID的情況,對于自增ID,使用tk.mybatis.mapper.additional.insert.InsertListMapper包下的insertList()方法;對于自定義ID,需要重寫insertList()方法2025-02-02

