最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring注解@Autowired和@Resource的區(qū)別詳解

 更新時(shí)間:2023年12月22日 10:22:55   作者:johnny233  
這篇文章主要介紹了Spring注解@Autowired和@Resource的區(qū)別詳解,@Autowired與@Resource都可以用來裝配bean,都可以寫在字段或setter方法上,@Resource是JDK提供的注解,默認(rèn)按照名稱進(jìn)行裝配,名稱可通過name屬性進(jìn)行指定,需要的朋友可以參考下

定義

@Autowired:默認(rèn)byType進(jìn)行自動(dòng)裝配,可以用于構(gòu)造器、字段、方法注入,且必須有一個(gè)Bean候選者注入;如果允許出現(xiàn)0個(gè)Bean候選者需要設(shè)置屬性"required=false","required"屬性含義和@Required一樣,只是@Required只適用于基于XML配置的setter注入方式。

@Resource:如果name和type屬性都不指定,默認(rèn)將先byName自動(dòng)裝配,找不到再byType;如果配置name屬性,使用byName進(jìn)行自動(dòng)裝配,而使用type時(shí)則使用byType進(jìn)行裝配;如果同時(shí)指定name和type,則從容器中找唯一匹配的bean裝配,找不到拋出異常。

@Autowired 與@Resource區(qū)別

  • @Autowired與@Resource都可以用來裝配bean,都可以寫在字段或setter方法上。
  • @Resource是JDK提供的注解,默認(rèn)按照名稱進(jìn)行裝配,名稱可通過name屬性進(jìn)行指定。如果沒有指定name屬性,當(dāng)注解寫在字段上時(shí),默認(rèn)取字段名,按照名稱查找,如果注解寫在setter方法上默認(rèn)取屬性名進(jìn)行裝配。當(dāng)找不到與名稱匹配的bean時(shí)才按照類型進(jìn)行裝配。但是如果name屬性一旦指定,就只會(huì)按照名稱進(jìn)行裝配。
  • @Autowired默認(rèn)按類型裝配(Spring提供的注解),默認(rèn)情況下必須要求依賴對(duì)象必須存在,如果要允許null值,可以設(shè)置它的required屬性為false,如:@Autowired(required=false);如果想使用名稱裝配可以結(jié)合@Qualifier注解進(jìn)行使用,如下:
@Autowired
@Qualifier("baseDao")    
private BaseDao baseDao;

@Resource裝配順序:

①如果同時(shí)指定name和type,則從Spring上下文中找到唯一匹配的bean進(jìn)行裝配,找不到則拋出異常。

②如果指定name,則從上下文中查找名稱(id)匹配的bean進(jìn)行裝配,找不到則拋出異常。

③如果指定type,則從上下文中找到類似匹配的唯一bean進(jìn)行裝配,找不到或是找到多個(gè),都會(huì)拋出異常。

④如果既沒有指定name,又沒有指定type,則自動(dòng)按照byName方式進(jìn)行裝配;如果沒有匹配,則回退為一個(gè)原始類型進(jìn)行匹配,如果匹配則自動(dòng)裝配。

@Resource的作用相當(dāng)于@Autowired,只不過@Autowired按照byType自動(dòng)注入。

@Resource 注解應(yīng)該只用于setter方法注入和字段屬性注入,不能提供如@Autowired多參數(shù)方法注入;

@Resource 首先將從JNDI環(huán)境中查找資源,如果沒找到默認(rèn)再到Spring容器中查找,因此如果JNDI環(huán)境中有和Spring容器同名的資源時(shí)需要注意。

autowired機(jī)制

Spring引入Autowire(自動(dòng)裝配)機(jī)制就是為了解決<bean>標(biāo)簽下<property>標(biāo)簽過多的問題: 如果一個(gè)Bean中要注入的對(duì)象過多,那將導(dǎo)致Spring配置文件非常冗長(zhǎng),可讀性與維護(hù)性差,配置麻煩且一不小心就容易出錯(cuò)。

使用Autowire去除<property>標(biāo)簽

autowire有兩處配置點(diǎn):

可以配置在<beans>根標(biāo)簽下,表示對(duì)全局<bean>起作用,屬性名為default-autowire

可以配置在<bean>標(biāo)簽下,表示對(duì)當(dāng)前<bean>起作用,屬性名為autowire

通常都是在<beans>根標(biāo)簽下配置自動(dòng)裝配比較多,default-autowire有四種取值:

  • no:默認(rèn),即不進(jìn)行自動(dòng)裝配,每一個(gè)對(duì)象的注入比如依賴一個(gè)<property>標(biāo)簽
  • byName:按照beanName進(jìn)行自動(dòng)裝配,使用setter注入
  • byType:按照bean類型進(jìn)行自動(dòng)裝配,使用setter注入
  • constructor:不常用,與byType差不多,不過最終屬性通過構(gòu)造函數(shù)進(jìn)行注入

byName意為在spring配置文件中查詢beanName與屬性名一致的bean并進(jìn)行裝配,若類型不匹配則報(bào)錯(cuò);byType意為在spring配置文件中查詢與屬性類型一致的bean并進(jìn)行裝配,若有多個(gè)相同類型則報(bào)錯(cuò)。

byType裝配出現(xiàn)多個(gè)相同類型的bean及解決方案 byType的裝配方式是在Spring配置文件中尋找屬性類型與bean類型一致的bean,如果屬性類型在Spring配置文件中有多個(gè)相同類型的bean時(shí),會(huì)報(bào)錯(cuò):

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name '*' defined in class path resource [*.xml]:
Unsatisfied dependency expressed through bean property '*': : No unique bean of type [*.*.*] is defined: expected single matching bean but 
found 2: [*, *]; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [*.*.*] is 
defined: expected single matching bean but found 2: [*, *]

解決方法:

  1. 將不需要進(jìn)行自動(dòng)裝配的bean進(jìn)行排除,設(shè)置其屬性autowire-candidate="false";
  2. 當(dāng)有多個(gè)候選者時(shí),優(yōu)先使用其中哪個(gè)候選者,對(duì)要作為自動(dòng)裝配候選者的bean設(shè)置primary="true";

在這里插入圖片描述

在這里插入圖片描述

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'apiController': Unsatisfied dependency expressed through field 'googleSqlService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'googleSqlService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'adplanPutService' is expected to be of type 'com.aaa.cbd.platform.service.AdplanPutGoogleService' but was actually of type 'com.aaa.cbd.platform.service.AdplanPutService'

在這里插入圖片描述

到此這篇關(guān)于Spring注解@Autowired和@Resource的區(qū)別詳解的文章就介紹到這了,更多相關(guān)@Autowired和@Resource的區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring整合Springmvc的相關(guān)介紹

    Spring整合Springmvc的相關(guān)介紹

    今天小編就為大家分享一篇關(guān)于Spring整合Springmvc的相關(guān)介紹,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java垃圾回收機(jī)制的finalize方法實(shí)例分析

    Java垃圾回收機(jī)制的finalize方法實(shí)例分析

    這篇文章主要介紹了Java垃圾回收機(jī)制的finalize方法,結(jié)合實(shí)例形式分析了finalize方法的特點(diǎn)及在垃圾回收機(jī)制中的相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • Java反射(Class類,Class對(duì)象獲取)

    Java反射(Class類,Class對(duì)象獲取)

    下面是對(duì)Java反射機(jī)制是在程序的運(yùn)行過程中,Java語(yǔ)言的反射機(jī)制的超詳細(xì)解說,點(diǎn)進(jìn)來的小伙伴不要錯(cuò)過奧
    2021-08-08
  • Java?web實(shí)現(xiàn)頭像上傳以及讀取顯示

    Java?web實(shí)現(xiàn)頭像上傳以及讀取顯示

    這篇文章主要為大家詳細(xì)介紹了Java?web實(shí)現(xiàn)頭像上傳以及讀取顯示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Jmeter 中 CSV 如何參數(shù)化測(cè)試數(shù)據(jù)并實(shí)現(xiàn)自動(dòng)斷言示例詳解

    Jmeter 中 CSV 如何參數(shù)化測(cè)試數(shù)據(jù)并實(shí)現(xiàn)自動(dòng)斷言示例詳解

    這篇文章主要介紹了Jmeter 中 CSV 如何參數(shù)化測(cè)試數(shù)據(jù)并實(shí)現(xiàn)自動(dòng)斷言,本文通過示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Spring Boot 配置MySQL數(shù)據(jù)庫(kù)重連的操作方法

    Spring Boot 配置MySQL數(shù)據(jù)庫(kù)重連的操作方法

    這篇文章主要介紹了Spring Boot 配置MySQL數(shù)據(jù)庫(kù)重連的操作方法,需要的朋友可以參考下
    2018-04-04
  • Java中JSON字符串反序列化(動(dòng)態(tài)泛型)

    Java中JSON字符串反序列化(動(dòng)態(tài)泛型)

    文章討論了在定時(shí)任務(wù)中使用反射調(diào)用目標(biāo)對(duì)象時(shí)處理動(dòng)態(tài)參數(shù)的問題,通過將方法參數(shù)存儲(chǔ)為JSON字符串并進(jìn)行反序列化,可以實(shí)現(xiàn)動(dòng)態(tài)調(diào)用,然而,這種方式容易導(dǎo)致內(nèi)存溢出(OOM),這篇文章主要介紹了JSON字符串反序列化?動(dòng)態(tài)泛型,需要的朋友可以參考下
    2024-12-12
  • Spring?Boot項(xiàng)目啟動(dòng)報(bào)錯(cuò)Unable?to?start?web?server解決方法

    Spring?Boot項(xiàng)目啟動(dòng)報(bào)錯(cuò)Unable?to?start?web?server解決方法

    這篇文章主要給大家介紹了關(guān)于Spring?Boot項(xiàng)目啟動(dòng)報(bào)錯(cuò)Unable?to?start?web?server的解決方法,錯(cuò)誤內(nèi)容大概的意思是未能加載嵌入的供web應(yīng)用加載的空間,是因?yàn)槿鄙賁ervletWebServerFactorybean,需要的朋友可以參考下
    2024-07-07
  • java?SpringMvc中攔截器的應(yīng)用

    java?SpringMvc中攔截器的應(yīng)用

    大家好,本篇文章主要講的是java?SpringMvc中攔截器的應(yīng)用,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Java對(duì)象和Map之間相互轉(zhuǎn)換的五種方法

    Java對(duì)象和Map之間相互轉(zhuǎn)換的五種方法

    在Java開發(fā)中,經(jīng)常需要將Java對(duì)象轉(zhuǎn)換成Map,或者反過來將Map轉(zhuǎn)換成Java對(duì)象,這種轉(zhuǎn)換在很多場(chǎng)景下都非常有用,比如在序列化和反序列化過程中、在數(shù)據(jù)傳輸和持久化時(shí)、或者在進(jìn)行對(duì)象屬性的批量操作時(shí),本文將介紹幾種不同的方法來實(shí)現(xiàn)Java對(duì)象和Map之間的相互轉(zhuǎn)換
    2025-02-02

最新評(píng)論

石嘴山市| 讷河市| 哈密市| 莱芜市| 广灵县| 教育| 阿合奇县| 古丈县| 三河市| 武山县| 永州市| 英吉沙县| 尼玛县| 新田县| 盘锦市| 祁门县| 建始县| 含山县| 容城县| 周口市| 富宁县| 乌兰察布市| 西贡区| 阿坝| 本溪市| 龙陵县| 甘南县| 南和县| 屏南县| 郸城县| 慈利县| 怀宁县| 烟台市| 饶平县| 温宿县| 古交市| 阿克苏市| 威海市| 潮安县| 若羌县| 宜昌市|