Spring中@Autowired和@Resource注解的使用區(qū)別詳解
1. @Autowired
@Autowired是由Spring提供的注解
@Autowired的bean的匹配規(guī)則
@Autowired默認(rèn)根據(jù)type進(jìn)行注入,找到與指定類型兼容的 Bean 并進(jìn)行注入,如果無法通過type匹配到對應(yīng)的 Bean 的話,會根據(jù)name進(jìn)行匹配,如果都匹配不到則拋出異常。
- @Autowired 默認(rèn)是按照類的類型去匹配。如果存在一個相同類型的bean,則注入該bean。
- 如果存在多個 bean,但只有一個 bean 擁有 @Primary 注解,則將帶有 @Primary 注解的 bean 注入。@Primary 注解用于指定默認(rèn)首選的 bean。
- 如果存在多個 bean,可以使用@Qualifier注解,配合該注解指定bean的具體名稱,根據(jù)名稱去識別bean。
- 如果存在多個 bean,可以使用 List 或 Set 數(shù)據(jù)結(jié)構(gòu)來接收所有匹配的 bean。Spring 將自動將所有匹配的 bean 放入這些集合中。
- 如果存在多個 bean,沒有配合上述的方案,則將拋出 NoUniqueBeanDefinitionException 異常。
@Autowired的required屬性
默認(rèn)情況下,required = true,即依賴bean必須存在,如果不存在,則會拋出異常。但是,通過將required屬性設(shè)置為false,則依賴bean不存在也不會報錯。
2. @Resource
@Resource是Java EE規(guī)范的一部分,但Spring同樣支持該注解。
@Resource的bean的匹配規(guī)則
默認(rèn)根據(jù)name進(jìn)行注入,如果無法通過名稱匹配到對應(yīng)的 Bean 的話,會根據(jù)type進(jìn)行匹配,找到與指定類型兼容的 Bean 并進(jìn)行注入,如果都匹配不到則拋出異常。
使用 name 屬性指定資源的名稱
@Component public class MyClass { // 名為 "myBean1" 的 bean 將會被注入 @Resource(name = "myBean1") private MyBean myBean; }
使用默認(rèn)名稱匹配資源
@Component public class MyClass { // 名為“mybean”的bean將被注入 @Resource private MyBean myBean; }
根據(jù)type 屬性來指定要注入的bean類型
public interface MyService { void fetchData(); } @Component public class MyServiceA implements MyService { public void fetchData() { System.out.println("from MyServiceA"); } } @Component public class MyServiceB implements MyService { public void fetchData() { System.out.println("from MyServiceB"); } } @Component public class DataProcessor { // 根據(jù)指定type注入myServiceA的bean @Resource(type = MyServiceA.class) private MyService myService; // 與上面效果相同注入myServiceA的bean @Resource private MyServiceA myServiceA; // 與上面效果相同注入myServiceA的bean @Resource private MyService myServiceA; // 與上面效果相同注入myServiceA的bean @Resource(name = "myServiceA") private MyService myService; // 注入bean失敗,存在兩個bean @Resource private MyService myService; }
@Resource不存在required屬性
到此這篇關(guān)于Spring中@Autowired和@Resource注解的使用區(qū)別詳解的文章就介紹到這了,更多相關(guān)@Autowired和@Resource注解區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
servlet實現(xiàn)文件上傳、預(yù)覽、下載、刪除功能
這篇文章主要為大家詳細(xì)介紹了servlet實現(xiàn)文件上傳、預(yù)覽、下載、刪除功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09java實現(xiàn)基于UDP協(xié)議網(wǎng)絡(luò)Socket編程(C/S通信)
這篇文章主要介紹了java實現(xiàn)基于UDP協(xié)議網(wǎng)絡(luò)Socket編程(C/S通信),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Java對文本文件MD5加密并ftp傳送到遠(yuǎn)程主機(jī)目錄的實現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Java對文本文件MD5加密并ftp傳送到遠(yuǎn)程主機(jī)目錄的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08No ‘Access-Control-Allow-Origin‘ header is&nb
這篇文章主要介紹了No ‘Access-Control-Allow-Origin‘ header is present跨域及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)順序表示例
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)順序表示例,需要的朋友可以參考下2014-03-03SpringCloud Config配置中心原理以及環(huán)境切換方式
這篇文章主要介紹了SpringCloud Config配置中心原理以及環(huán)境切換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03