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

深入了解Spring中的@Autowired和@Resource注解

 更新時間:2023年04月21日 09:10:45   作者:.番茄炒蛋  
Spring中的@Autowired和@Resource注解都可以實現(xiàn)依賴注入,但使用方式、注入策略和適用場景略有不同。本文將深入探討這兩種注解的原理、使用方法及優(yōu)缺點,幫助讀者更好地理解和運用Spring依賴注入機制

@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)裝配依賴對象,默認(rèn)情況下它要求依賴對象必須存在,如果允許null值,可以設(shè)置它的required屬性為false.如果我們想使用按照名稱(byName)來裝配,可以結(jié)合@Qualififier注解一起使用.如下:

@RestController
public class DemoController {
    @Autowired
    @Qualifier(value = "demoService")
    DemoService demoService;
}

如果存在多個同類型的Bean對象,可以使用@Primary來指定一個默認(rèn)的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默認(rèn)按照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方式進行裝配,如果匹配則自動裝配.如果沒有匹配,則回退為一個原始類型進行匹配.

總結(jié)

區(qū)別

  • @Resource默認(rèn)按名稱進行匹配,@Autowired默認(rèn)按照類型進行匹配,但可以通過@Qualifier注解指定名稱進行匹配
  • @Resource可以用在字段,setter方法和構(gòu)造函數(shù)上,@Autowired可以用在字段,setter方法,構(gòu)造函數(shù)和方法上
  • @Resource不支持@Primary注解,@Autowired支持
  • @Resource是JavaEE5提供的注解,而@Autowired是Spring Framework提供的注解

應(yīng)用場景

根據(jù)以上區(qū)別,我們可以根據(jù)具體情況選擇使用@Resource或@Autowired.如果希望按照名稱進行匹配,并且不需要支持@Primary注解,可以選擇@Resource;如果希望按照類型進行匹配,并且需要支持@Primary注解,可以選擇@Autowried.根據(jù)具體情況選擇合適的注解來實現(xiàn)自動裝配

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

相關(guān)文章

  • J2SE與c#的幾點比較

    J2SE與c#的幾點比較

    這篇文章主要介紹了J2SE與c#的幾點比較,是看完馬士兵老師的J2SE視頻教程有感而寫,需要的朋友可以參考下
    2014-08-08
  • 詳解Maven多模塊打包遇到的問題解決方法

    詳解Maven多模塊打包遇到的問題解決方法

    這篇文章主要介紹了詳解Maven多模塊打包遇到的問題解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java多線程-同步塊實例講解

    java多線程-同步塊實例講解

    本文主要介紹java多線程-同步塊的知識,這里整理了相關(guān)的詳細資料及簡單示例代碼,有興趣的小伙伴可以參考下
    2016-09-09
  • 教你使用springboot配置多數(shù)據(jù)源

    教你使用springboot配置多數(shù)據(jù)源

    發(fā)現(xiàn)有很多小伙伴還不會用springboot配置多數(shù)據(jù)源,今天特地給大家整理了本篇文章,文中有非常詳細的圖文介紹及代碼示例,對正在學(xué)習(xí)java的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05
  • java8 stream的分組功能實例介紹

    java8 stream的分組功能實例介紹

    這篇文章主要給大家介紹了關(guān)于java8 stream的分組功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用java8具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java獲取文件路徑常用方法解析

    Java獲取文件路徑常用方法解析

    這篇文章主要介紹了Java獲取文件路徑常用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • jenkins+maven+svn自動部署和發(fā)布的詳細圖文教程

    jenkins+maven+svn自動部署和發(fā)布的詳細圖文教程

    Jenkins是一個開源的、可擴展的持續(xù)集成、交付、部署的基于web界面的平臺。這篇文章主要介紹了jenkins+maven+svn自動部署和發(fā)布的詳細圖文教程,需要的朋友可以參考下
    2020-09-09
  • Java中Spring的單例模式使用

    Java中Spring的單例模式使用

    這篇文章主要介紹了Java中Spring的單例模式使用,spring中的單例也不影響應(yīng)用并發(fā)訪問。大多數(shù)時候客戶端都在訪問我們應(yīng)用中的業(yè)務(wù)對象,為減少并發(fā)控制,不應(yīng)該在業(yè)務(wù)對象中設(shè)置那些容易造成出錯的成員變量,下面一起進入文章了解更多詳細內(nèi)容吧
    2022-01-01
  • java獲取版本號及字節(jié)碼編譯版本方法示例

    java獲取版本號及字節(jié)碼編譯版本方法示例

    這篇文章主要給大家介紹了關(guān)于java獲得版本號及字節(jié)碼編譯版本的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Mybatis中通用Mapper的InsertList()用法

    Mybatis中通用Mapper的InsertList()用法

    文章介紹了通用Mapper中的insertList()方法在批量新增時的使用方式,包括自增ID和自定義ID的情況,對于自增ID,使用tk.mybatis.mapper.additional.insert.InsertListMapper包下的insertList()方法;對于自定義ID,需要重寫insertList()方法
    2025-02-02

最新評論

大洼县| 民县| 枣庄市| 宿州市| 汤原县| 买车| 墨江| 新津县| 郁南县| 磐石市| 洛浦县| 札达县| 新兴县| 锡林浩特市| 汤原县| 富宁县| 吉安县| 三江| 秭归县| 威宁| 惠安县| 安西县| 沂水县| 仁寿县| 教育| 宣城市| 巴青县| 长宁区| 佛山市| 凤冈县| 贵德县| 宜兰市| 怀宁县| 潜江市| 南木林县| 合川市| 石泉县| 交城县| 正蓝旗| 河西区| 柳林县|