欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間: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)行自動裝配,可以用于構(gòu)造器、字段、方法注入,且必須有一個Bean候選者注入;如果允許出現(xiàn)0個Bean候選者需要設(shè)置屬性"required=false","required"屬性含義和@Required一樣,只是@Required只適用于基于XML配置的setter注入方式。

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

@Autowired 與@Resource區(qū)別

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

@Resource裝配順序:

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

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

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

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

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

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

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

autowired機制

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

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

autowire有兩處配置點:

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

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

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

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

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

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

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)行自動裝配的bean進(jìn)行排除,設(shè)置其屬性autowire-candidate="false";
  2. 當(dāng)有多個候選者時,優(yōu)先使用其中哪個候選者,對要作為自動裝配候選者的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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java設(shè)計模式中的適配器模式

    Java設(shè)計模式中的適配器模式

    這篇文章主要介紹了Java設(shè)計模式中的適配器模式,適配器模式(Adapter Pattern)將某個類的接口轉(zhuǎn)換成客戶端期望的另一個接口表示,主的目的是兼容性,讓原本因接口不匹配不能一起工作的兩個類可以協(xié)同工作。其別名為包裝器
    2022-07-07
  • SpringBoot內(nèi)置tomcat調(diào)優(yōu)測試優(yōu)化

    SpringBoot內(nèi)置tomcat調(diào)優(yōu)測試優(yōu)化

    這篇文章主要介紹了SpringBoot內(nèi)置tomcat調(diào)優(yōu)測試優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • HashMap 和 HashSet的區(qū)別

    HashMap 和 HashSet的區(qū)別

    本文主要介紹HashMap 和 HashSet的區(qū)別,這里整理了詳細(xì)的資料來說名兩者的區(qū)別,并說明如何使用該方法,有需要的小伙伴可以參考下
    2016-09-09
  • Javamail使用過程中常見問題解決方案

    Javamail使用過程中常見問題解決方案

    這篇文章主要介紹了Javamail使用過程中常見問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • 詳解java.lang.NumberFormatException錯誤及解決辦法

    詳解java.lang.NumberFormatException錯誤及解決辦法

    這篇文章主要介紹了詳解java.lang.NumberFormatException錯誤及解決辦法,本文詳解的介紹了錯誤的解決方法,感興趣的可以一起來了解一下
    2020-05-05
  • Spring Bean初始化及銷毀多種實現(xiàn)方式

    Spring Bean初始化及銷毀多種實現(xiàn)方式

    這篇文章主要介紹了Spring Bean初始化及銷毀多種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java中實現(xiàn)訂單超時自動取消功能(最新推薦)

    Java中實現(xiàn)訂單超時自動取消功能(最新推薦)

    本文介紹了Java中實現(xiàn)訂單超時自動取消功能的幾種方法,包括定時任務(wù)、JDK延遲隊列、Redis過期監(jiān)聽、Redisson分布式延遲隊列、RocketMQ延遲消息和RabbitMQ死信隊列,每種方法都有其優(yōu)缺點,可以根據(jù)具體需求選擇合適的方法,感興趣的朋友一起看看吧
    2025-02-02
  • 多數(shù)據(jù)源模式JPA整合sharding-jdbc實現(xiàn)數(shù)據(jù)脫敏

    多數(shù)據(jù)源模式JPA整合sharding-jdbc實現(xiàn)數(shù)據(jù)脫敏

    這篇文章主要為大家介紹了JPA項目中多數(shù)據(jù)源模式整合sharding-jdbc來實現(xiàn)數(shù)據(jù)脫敏,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • springboot對接minio的webhook完整步驟記錄

    springboot對接minio的webhook完整步驟記錄

    Minio是一款開源的對象存儲服務(wù),它致力于為開發(fā)者提供簡單、高性能、高可用的云存儲解決方案,下面這篇文章主要給大家介紹了關(guān)于springboot對接minio的webhook的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • 基于jvm-sandbox的imock開發(fā)指南詳解

    基于jvm-sandbox的imock開發(fā)指南詳解

    這篇文章主要為大家介紹了基于jvm-sandbox的imock開發(fā)指南詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評論