Spring AutoWired與Resource區別?

大家好,我是鋒哥。今天分享關于【Spring AutoWired與Resource區別?】面試題。希望對大家有幫助;

Spring AutoWired與Resource區別?

1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網

在 Spring 中,@Autowired@Resource 都是用于依賴注入(DI,Dependency Injection)的注解,它們的作用是將一個 Bean 自動注入到另一個 Bean 中。雖然它們的功能相似,但也存在一些差異。下面我們將詳細對比這兩者的不同之處。

1.?@Autowired?注解

@Autowired 是 Spring 提供的注解,它可以自動將一個 Bean 注入到其他 Bean 中。它基于類型(默認)或名稱來注入依賴,具體行為可以通過不同的配置來定制。

使用方式:
@Component
public class Car {private Engine engine;@Autowiredpublic Car(Engine engine) {  // 構造器注入this.engine = engine;}public Engine getEngine() {return engine;}
}
主要特點:
  • 按類型注入@Autowired 默認是按類型(type)來進行注入的。Spring 會根據類型自動匹配合適的 Bean。如果有多個符合條件的 Bean,會根據配置的規則選擇一個。

  • 構造器注入、字段注入和方法注入@Autowired 可以用在構造器、字段和 setter 方法上。

  • required 屬性:可以通過 @Autowired(required=false) 來配置非必需的依賴,如果沒有找到匹配的 Bean,則不會拋出異常。

    示例:

    @Autowired(required = false)  // 不會拋出異常,如果沒有找到對應的 Bean
    private Engine engine;
    
  • @Primary 配合使用:如果有多個候選 Bean 可以注入,@Primary 注解可以指定默認的注入 Bean。

按名稱選擇注入:

如果要按名稱注入(比如某個 Bean 的名稱為 engine),可以配合 @Qualifier 注解使用。

@Autowired
@Qualifier("specificEngine")
private Engine engine;

2.?@Resource?注解

@Resource 是 Javax 提供的注解,并且它是 JSR-250 的一部分。它的功能與 @Autowired 類似,但其注入方式優先考慮 按名稱,其次按 類型 進行注入。

使用方式:
@Component
public class Car {@Resourceprivate Engine engine;
}
主要特點:
  • 按名稱注入@Resource 優先按照 Bean 的名稱進行注入。如果沒有找到符合名稱的 Bean,Spring 會繼續根據類型進行注入。

  • name 屬性:可以顯式指定要注入的 Bean 的名稱。

    示例:

    @Resource(name = "specificEngine")
    private Engine engine;
    
  • @Autowired 的區別@Resource 注解具有明確的優先級,首先通過 Bean 的名稱來匹配,如果沒有找到匹配的 Bean,再按類型進行注入。因此,它在注入時會首先依賴名稱來進行匹配,而不是像 @Autowired 默認的按類型注入。

    例如:

    @Component
    public class Car {@Resource(name = "specificEngine")private Engine engine;
    }
    

    如果 @Resource 找不到名稱為 specificEngine 的 Bean,才會根據類型進行注入。

3.?@Autowired?與?@Resource?的主要區別

特性@Autowired@Resource
注入方式默認按類型注入;可以通過?@Qualifier?按名稱指定默認按名稱注入;如果找不到名稱,則按類型注入
優先級按類型優先匹配;可以使用?@Qualifier?精確匹配按名稱優先匹配;其次按類型匹配
required?屬性可以設置?required = false?控制是否為必填項沒有?required?屬性
支持的注入位置支持構造器注入、字段注入、setter 方法注入僅支持字段注入和 setter 方法注入
規范支持Spring 提供的注解JSR-250?規范的一部分

4.?實際應用中選擇使用?@Autowired?或?@Resource

  • @Autowired?更常用:由于?@Autowired?是 Spring 框架提供的注解,默認按類型進行注入,因此在大多數情況下,它更加靈活且易于使用。使用時,通常搭配?@Qualifier?精確指定注入的 Bean。
  • @Resource?適合 Java EE 規范要求的場景@Resource?是 JSR-250 規范的一部分,適用于那些需要遵循 Java EE 規范的項目,或者當你想明確按名稱注入時,使用?@Resource?會更加直觀。

5.?代碼示例比較

使用?@Autowired?按類型注入:
@Component
public class Car {@Autowiredprivate Engine engine;  // 按類型注入 Engine 類型的 Bean
}
使用?@Resource?按名稱注入:
@Component
public class Car {@Resource(name = "specificEngine")private Engine engine;  // 按名稱注入名為 specificEngine 的 Bean
}

總結

  • @Autowired:是 Spring 專有的注解,按類型注入 Bean,具有靈活的配置選項,適用于大多數 Spring 應用。
  • @Resource:是 JSR-250 規范的一部分,優先按名稱注入,如果沒有找到合適的名稱 Bean,則按類型注入,適合需要遵循 Java EE 規范的項目。

在實際開發中,@Autowired 是最常見的選擇,@Resource 更多用于與 Java EE 標準兼容的項目。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71680.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71680.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71680.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是HTTP/2協議?NGINX如何支持HTTP/2并提升網站性能?

HTTP/2是一種用于在Web瀏覽器和服務器之間進行通信的協議,旨在提高網站性能和加載速度。它是HTTP/1.1的繼任者,引入了許多優化和改進,以適應現代Web應用的需求。HTTP/2的主要目標是減少延遲、提高效率,以及更好地支持并發請求。 …

【Bluedroid】AVRCP 連接源碼分析(一)

一、AVRCP協議簡介 AVRCP(Audio/Video Remote Control Profile)是藍牙協議棧中的一個重要部分,它定義了藍牙設備之間的音視頻傳輸控制的流程和特點。AVRCP使得用戶可以通過一個藍牙設備(如手機)遠程控制另一個藍牙設備(如藍牙耳機或音箱)上的音視頻播放,如播放、暫停、…

【QT中的一些高級數據結構,持續更新中...】

QT中有一些很精妙、便捷的設計,在了解這些數據的同時,我們可以學到如何更好的設計代碼。本貼持續更新中,歡迎關注和收藏 一 QScopedPointer主要特點:示例代碼 二 Q_DISABLE_COPY 一 QScopedPointer QScopedPointer 是 Qt 中的一種…

行業分析---對自動駕駛規控算法的思考

1 前言 隨著自動駕駛端到端大模型的興起,小鵬、華為、理想、蔚來、小米等公司都對自動駕駛業務部進行了組織架構的調整,準備應對新的或者更高級別的自動駕駛研發任務。 近幾年由于自動駕駛技術的快速發展,不少從業者覺得相關職業的未來充滿了…

C++ 設計模式-模板方法模式

文件處理 #include <iostream>// 抽象基類&#xff1a;定義模板方法和抽象步驟 class DataProcessor { public:// 模板方法&#xff08;固定流程&#xff09;void Process() {OpenFile();ProcessData(); // 由子類實現CloseFile();}protected:virtual void ProcessData…

Deepseek快速做PPT

背景: DeepSeek大綱生成 → Kimi結構化排版 → 數據審查,細節調整 DeepSeek 擁有深度思考能力,擅長邏輯構建與內容生成,它會根據我們的問題進行思考,其深度思考能力當前測試下來,不愧為國內No.1,而且還會把中間的思考過程展示出來,大多時候會給出很多我們意想不到的思…

【多語言生態篇一】【DeepSeek×Java:Spring Boot微服務集成全棧指南 】

(手把手帶你從零實現AI能力調用,萬字長文預警,建議收藏實操) 一、環境準備:別輸在起跑線上 1.1 硬件軟件全家桶 JDK版本:必須 ≥17(Spring Boot 3.2+強制要求,低版本直接報錯)IDE推薦:IntelliJ IDEA終極版(社區版缺Spring AI插件支持)構建工具:Maven 3.9+ / Grad…

【YOLOv8】損失函數

學習視頻&#xff1a; yolov8 | 損失函數 之 5、類別損失_嗶哩嗶哩_bilibili yolov8 | 損失函數 之 6、定位損失 CIoU DFL_嗶哩嗶哩_bilibili 2.13、yolov8損失函數_嗶哩嗶哩_bilibili YOLOv8 的損失函數由類別損失和定位損失構成 類別損失&#xff1a;BCE Loss 定位損失…

DEMF模型賦能多模態圖像融合,助力肺癌高效分類

目錄 論文創新點 實驗設計 1. 可視化的研究設計 2. 樣本選取和數據處理 3. 集成分類模型 4. 實驗結果 5. 可視化結果 圖表總結 可視化知識圖譜 在肺癌早期篩查中,計算機斷層掃描(CT)和正電子發射斷層掃描(PET)作為兩種關鍵的影像學手段,分別提供了豐富的解剖結構…

小魚深度評測 | 通義靈碼2.0,不僅可跨語言編碼,自動生成單元測試等,更炸裂的是集成DeepSeek模型且免費使用,太炸裂了。

小魚深度評測 通義靈碼2.0 1、引言2、通義靈碼 更新與安裝2.1 IDE插件更新2.1.1 PyCharm 更新2.1.2 VSCode 更新 2.2 官網下載更新 3、 使用體驗3.1生成單元測試3. 2 跨語言編程3.3靈碼2.0 與1.0 對比 4、總結 1、引言 通義靈碼&#xff0c; 我一直使用的編碼協助工具&#xf…

《微軟量子芯片:開啟量子計算新紀元》:此文為AI自動生成

量子計算的神秘面紗 在科技飛速發展的今天,量子計算作為前沿領域,正逐漸走進大眾的視野。它宛如一把神秘的鑰匙,有望開啟未來科技變革的大門,而微軟量子芯片則是這把鑰匙上一顆璀璨的明珠。 量子計算,簡單來說,是一種遵循量子力學規律調控量子信息單元進行計算的新型計算…

深度解讀DeepSeek:從原理到模型

一、大模型模型發展路線退 二、DeepSeek V2-V3/R1技術原理 DeepSeek V2、V3 和 R1 模型架構優化要點&#xff1a; 1、?DeepSeek V2? 混合專家架構&#xff08;DeepSeekMoE&#xff09;?&#xff1a;采用細粒度專家劃分與共享專家機制&#xff0c;總參數規模達236B但僅激活…

easyexcel 2.2.6版本導出excel模板時,標題帶下拉框及其下拉值過多不顯示問題

需求背景&#xff1a;有一個需求要做下拉框的值有100多條&#xff0c;同時這個excel是一個多sheet的導入模板 直接用easyexcel 導出&#xff0c;會出現下拉框的值過多&#xff0c;導致生成出來的excel模板無法正常展示下拉功能 使用的easyexcel版本&#xff1a;<depende…

基于WebRTC與AI大模型接入EasyRTC:打造輕量級、高實時、強互動的嵌入式音視頻解決方案

隨著物聯網和嵌入式技術的快速發展&#xff0c;嵌入式設備對實時音視頻通信的需求日益增長。然而&#xff0c;傳統的音視頻解決方案往往存在體積龐大、實時性差、互動體驗不佳等問題&#xff0c;難以滿足嵌入式設備的資源限制和應用場景需求。 針對以上痛點&#xff0c;本文將介…

AI工作流+專業知識庫+系統API的全流程任務自動化

我有點悲觀&#xff0c;甚至很沮喪&#xff0c;因為AI留給普通人的機會不多了&#xff0c;這既是人類之間權力的斗爭&#xff0c;也是硅基生命和碳基生命的斗爭。AI自動化是無法避免的趨勢&#xff0c;如果人類不能平權&#xff0c;那就只能跪下接受審判。 通過整合AI工作流、專…

Lua | 每日一練 (3)

&#x1f4a2;歡迎來到張胤塵的技術站 &#x1f4a5;技術如江河&#xff0c;匯聚眾志成。代碼似星辰&#xff0c;照亮行征程。開源精神長&#xff0c;傳承永不忘。攜手共前行&#xff0c;未來更輝煌&#x1f4a5; 文章目錄 Lua | 每日一練 (3)題目參考答案減少查找次數預分配表…

二叉樹(中等題)

1、先序&#xff0c;中序遍歷確定二叉樹 105 方法一、 前提 ① 必須不能有重復元素② 只有先序&#xff0b;中序和后序&#xff0b;中序才能實現唯一樹 思考要點&#xff1a; 不要想著用for循環&#xff0c;遞歸一定更好解決輸入是vector&#xff0c;遞歸就得考慮傳入索…

服務器通過 ollama 運行deepseek r1

1、服務器環境簡介 56核 CPU64G 內存無顯卡已安裝 Ollama 2、下載模型與配置 正常可以通過 ollama pull 或 ollama run 命令直接下載&#xff0c;但通常會遇到連接超時、找不到網址等總理。因此&#xff0c;可以使用國內的模型站進行下載&#xff0c;在這里使用魔塔查找模型…

java項目排查線上問題1111

1.磁盤容量不足&#xff1a; 應用拋出的異常信息&#xff1a;java.io.IOException: 磁盤空間不足 1.1 指令獲取磁盤狀態&#xff1a;df -h 1.2 獲取目錄下文件夾大小&#xff1a;du -sh * 1.3 獲取目錄下文件夾大小&#xff1a;ls -lh 可以找到最大的文件&#xff0c;如日…

js中 ES6 新特性詳解

ES6&#xff08;ECMAScript 2015&#xff09;是 JavaScript 的一次重大更新&#xff0c;引入了許多新的特性&#xff0c;使 JavaScript 代碼更加簡潔、可讀和高效。以下是 ES6 的主要新特性及其原理 1. let 和 const 關鍵字 原理解析 1.1 作用域 var 關鍵字的作用域&#xf…