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

深入了解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)裝配依賴對象,默認情況下它要求依賴對象必須存在,如果允許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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中Socket用法詳解

    Java中Socket用法詳解

    本文詳細講解了Java中Socket的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • NoHttpResponseException問題排查解決記錄分析

    NoHttpResponseException問題排查解決記錄分析

    這篇文章主要為大家介紹了NoHttpResponseException問題排查解決記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • java面試應用上線后Cpu使用率飆升如何排查

    java面試應用上線后Cpu使用率飆升如何排查

    這篇文章主要為大家介紹了java面試中應用上線后Cpu使用率飆升如何排查的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 深入探究Java線程的狀態(tài)與生命周期

    深入探究Java線程的狀態(tài)與生命周期

    在java中,任何對象都要有生命周期,線程也不例外,它也有自己的生命周期。線程的整個生命周期可以分為5個階段,分別是新建狀態(tài)、就緒狀態(tài)、運行狀態(tài)、阻塞狀態(tài)和死亡狀態(tài)
    2022-04-04
  • SpringBoot攔截器的使用小結

    SpringBoot攔截器的使用小結

    今天給大家總結一下SpringBoot下攔截器的使用,需要的朋友參考下吧
    2017-05-05
  • Java開發(fā)學習之Bean的生命周期詳解

    Java開發(fā)學習之Bean的生命周期詳解

    從創(chuàng)建到消亡的完整過程,例如人從出生到死亡的整個過程就是一個生命周期。本文將通過示例為大家詳細講講Bean的生命周期,感興趣的可以學習一下
    2022-06-06
  • Java設計模塊系列之書店管理系統(tǒng)單機版(一)

    Java設計模塊系列之書店管理系統(tǒng)單機版(一)

    這篇文章主要為大家詳細介紹了Java單機版的書店管理系統(tǒng)設計模塊和思想第一章,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 基于ScheduledExecutorService的兩種方法(詳解)

    基于ScheduledExecutorService的兩種方法(詳解)

    下面小編就為大家?guī)硪黄赟cheduledExecutorService的兩種方法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • SpringBoot動態(tài)修改日志級別的操作

    SpringBoot動態(tài)修改日志級別的操作

    這篇文章主要介紹了SpringBoot動態(tài)修改日志級別的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • spring配置掃描多個包問題解析

    spring配置掃描多個包問題解析

    這篇文章主要介紹了spring配置掃描多個包問題解析,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10

最新評論