【@AutoWired和@Resource的區別】


@AutoWired和@Resource的區別

這兩個我們在項目中,經常去使用。很少有人知道他們有什么區別。下面我們將從

  • 來源
  • 依賴查找順序
  • 支持的參數
  • 依賴注入的用法支持

這四個方面來說明他們倆個的區別

來源

  • @Autowired: 這是Spring框架自帶的注解,用于實現自動依賴注入。
  • @Resource: 這是Java EE 5的注解,由JSR-250規范定義,也被Spring框架支持,用于實現JNDI查找和自動裝配。

依賴查找順序

  • @Autowired: Spring容器在解析@Autowired注解時,首先會按照類型進行匹配,如果存在多個相同類型的Bean,則會進一步根據名稱進行匹配。如果沒有明確指定名稱,Spring將拋出異常。

指定名字用的注解就是@Qualifier

  • @Resource: 默認的注入順序是按照Bean的名稱進行匹配,如果找不到,則會按照類型進行匹配。如果仍然找不到,將不會拋出異常,而是返回null

支持的參數

  • @Autowired: 支持多種參數,包括required(是否必須)和primary(是否首選)等。
  • @Resource: 支持name屬性,可以通過它指定要注入的Bean的名稱。也支持type屬性。可以根據類型查找對應的bean。

依賴注入的用法支持

  • @Autowired: 支持屬性注入、構造方法注入和Setter注入
  • @Resource: 只支持屬性注入和Setter注入

額外補充

  • 覆蓋性: @Autowired提供了更豐富的配置選項,如通過@Qualifier注解來指定注入的具體Bean。

  • 兼容性: @Autowired是Spring特有的,而@Resource是Java EE的一部分,因此@Resource在非Spring環境中也可能被使用。

  • 使用場景: @Autowired通常用于Spring管理的Bean之間的依賴關系,而@Resource可能用于那些同時需要兼容Java EE環境的場景。

  • 性能考慮: 在某些情況下,@Autowired可能需要更多的解析工作,特別是在沒有明確指定Bean名稱時,而@Resource則直接依賴于JNDI查找,可能在查找順序上更直接。

  • 搜索范圍

    • @Autowired在Spring的組件掃描中搜索Bean。
    • @Resource在JVM范圍內搜索資源,不限于Spring容器。

為什么idea推薦我們使用@Resource

當我們用@autowired的時候會有這樣的提示

@Autowired
private IFileService fileService;

image-20240423195603981

他給出的原因是這樣的

image-20240423195708218

下面給出一點我的見解。

  • 使用@Resource可以提高代碼的兼容性,特別是在需要與Java EE環境交互時。
  • @Autowired如果找不到匹配的Bean,會拋出一個異常,除非它使用了optional=true參數。
  • @Resource如果找不到匹配的資源,不會拋出異常,而是將變量設置為null

所以說我認為推薦使用@Resource而不是@Autowired的情況:

  • 兼容性:如果你的應用程序需要在Java EE環境中運行,或者需要與Java EE資源進行交互,使用@Resource可以提高代碼的兼容性。
  • 默認行為:如果你更傾向于根據名稱進行資源的自動裝配,而不是類型,@Resource可能更符合你的需求。
  • 避免異常:如果你希望在找不到匹配的資源時不拋出異常,而是將變量設置為null@Resource提供了這樣的行為。

不管是使用@autowired還是@resource 都是可以實現功能的,更多的還是看我們的編程習慣。

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

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

相關文章

絕區零 Mac 下載安裝詳細教程(MacOS IPA 砸殼包 playCover 完美運行)

絕區零 7.4 號開始公測,但剛剛就可以開始下載了,我也是第一時間就迫不及待的安裝到了我的 Mac 電腦上,感興趣的朋友可以跟我一起安裝試試 我這里是通過 playCover 的形式在 Mac 上安裝運行的,根據之前原神的經驗所以這次還是同樣…

惠海 H6912 升壓恒流芯片IC 支持2.6-40V升12V24V36V48V60V100V 10A 攝影燈 太陽能燈 UV燈 殺菌燈

1.產品描述 H6912是一款外圍電路簡潔的寬調光比升壓調光LED恒流驅動器,可適用于2.6-40V輸入 電壓范圍的LED恒流照明領域。H6912可以實現高精度的恒流效果,輸出電流恒流精度≤士3%,電壓工作范圍為2.6-40V.可以輕松滿足鋰電池及中低壓的應用需…

Python中的爬蟲實戰:貓眼電影爬蟲

隨著互聯網技術的快速發展,網絡上的信息量越來越龐大。貓眼電影作為國內領先的電影數據平臺,為用戶提供了全面的電影信息服務。本文將介紹如何利用python編寫簡單的貓眼電影爬蟲,獲取電影相關數據。 爬蟲概述 爬蟲,即網絡爬蟲&a…

x264 編碼器 common.h 文件中結構體詳細介紹

x264_slice_header_t 定義:typedef struct {x264_sps_t *sps;x264_pps_t *pps;int i_type;int i_first_mb;int i_last_mb;int i_pps_id;int i_frame_num

嵌入式Linux系統編程 — 6.1 信號的基本概念

目錄 1 信號的概念和作用 1.1 什么是信號 1.2 信號的目的 1.3 信號如何處理 2 信號的分類 2.1 可靠信號與不可靠信號 2.2 實時信號與非實時信號 3 常見信號與默認行為 3.1 信號本質上是 int 類型數字編號 3.2 常見信號 1 信號的概念和作用 1.1 什么是信號 信號是一…

艾體寶干貨 | 解析Redis企業版的多租戶技術

在多租戶架構中,一個軟件實例為多個不同的用戶組(或“租戶”)提供服務。每個租戶的數據都被安全地隔離,確保它們對其他租戶不可見且無法訪問。可以將其想象為一棟公寓大樓,每個人都住在共享建筑中獨立且隔離的單元中。…

Java 商城后臺管理系統

### 構建一個健壯的商城后臺管理系統 使用Java Spring Boot框架和MySQL數據庫,逐步構建一個健壯、安全、高效的商城后臺管理系統。本文涵蓋用戶管理、商品管理、訂單管理、分類管理、權限控制、日志記錄、分頁和排序、文件上傳、緩存以及國際化。 --- #### 項目初…

大模型時代的基礎架構,大模型算力中心建設指南重磅來襲!

什么是最暢銷商品?什么是高毛利商品? 我們來看一個例子: 一件T恤使用成本為100元的原料,價格為140元。另一件T恤使用成本為80元的原料,但在樣式、顏色、圖案的設計上比較有特色,價格也為140元。 當這兩件…

【JVM-04】線上CPU100%

【JVM-04】線上CPU100% 1. 如何排查2. 再舉一個例子 1. 如何排查 ?般CPU100%瘋狂GC,都是死循環的鍋,那怎么排查呢?先進服務器,?top -c 命令找出當前進程的運?列表按?下 P 可以按照CPU使?率進?排序顯示Java進程 PID 為 2609…

蘇東坡傳-讀書筆記七

蘇堤和西湖之與杭州,正如美女花容月貌上的雙眸。我常想,倘若西湖之是空空的一片水——沒有蘇堤那秀美的修眉和虹彩般的仙島,一畫龍點睛增其神韻,那西湖該望之如何?幾百年來的中國游客,春季到來之時,向西湖…

throw和catch關鍵字的作用。

在C中,throw和catch是異常處理機制的關鍵字,它們共同工作以處理在程序執行過程中發生的異常情況。 throw 關鍵字 throw關鍵字用于拋出一個異常。當程序遇到無法處理的錯誤時,它會使用throw語句拋出一個異常。這通常是因為遇到了某些無法恢復…

使用Vue 2 + Element UI搭建后臺管理系統框架實戰教程

后臺管理系統作為企業內部的核心業務平臺,其界面的易用性和功能性至關重要。Vue 2作為一個成熟的前端框架,以其輕量級和高效著稱,而Element UI則是一套專為桌面端設計的Vue 2組件庫,它提供了豐富的UI元素和組件,大大簡…

如何在Python中實現一個簡單的爬蟲程序

如何在Python中實現一個簡單的爬蟲程序 隨著互聯網的發展,數據已成為當今社會最寶貴的資源之一。而爬蟲程序則成為了獲取互聯網數據的重要工具之一。本文將介紹如何在Python中實現一個簡單的爬蟲程序,并提供具體的代碼示例。 確定目標網站 在開始編寫爬…

【Python】已解決:urllib.error.HTTPError: HTTP Error 403: Forbidden

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例五、注意事項 已解決:urllib.error.HTTPError: HTTP Error 403: Forbidden 一、分析問題背景 在使用Python的urllib庫中的urlopen或urlretrieve函數下載文件時,有時會遇到…

Android動畫:提升用戶體驗的關鍵技術

Android平臺上的動畫技術不僅僅是界面美化的手段,它更是提升用戶體驗、增強交互性和吸引用戶注意力的重要工具。從簡單的過渡動畫到復雜的視圖動態效果,Android開發者可以利用豐富的動畫API創造出令人印象深刻的應用程序。本文將深入探討Android動畫的多…

Python打字練習

代碼解析 導入模塊和定義單詞列表 import tkinter as tk import randomsample_words ["apple", "banana", "cherry", "date", "fig", "grape", "kiwi", "lemon", "mango", &quo…

LDA主題分析的原理、步驟和實現

當然可以!LDA 主題模型是一種強大的工具,用于從大量文本數據中發現隱藏的主題。讓我們更詳細地介紹它的原理、步驟和實現。 LDA原理 LDA是一種生成模型,它假設: 每個文檔是由若干主題組成的。每個主題是由若干詞匯組成的。 具…

vcpkg國內鏡像源替換

vcpkg國內鏡像源替換 一、從Gitee上下載vcpkg二、全局替換vcpkg/scripts文件下的字符三、回到vcpkg目錄下,執行bootstrap-vcpkg.bat文件,等待執行完畢四、全局替換vcpkg/ports文件下的字符 一、從Gitee上下載vcpkg git clone https://gitee.com/mirrors…

全國30省份各省資本存量數據固定資本形成總額永續盤存法(2000-2023年)

各省資本存量數據通過永續盤存法進行了詳細的計算,這一方法覆蓋了中國30個省份(不包括西藏),提供從2000年起直至2023的資本存量數據集。包括原始數據、測算過程、最終的資本存量結果。 以2000年作為基期年份,依據…

電路筆記(PCB):電流容量(IPC-2221和IPC-2152)+阻抗匹配

電流容量 IPC-2221經驗公式 I K T b A c IK\times T^{b}\times A^{c} IKTbAc 這個公式用于估計PCB(Printed Circuit Board,印刷電路板)導線上的電流(I),其中T和A分別表示溫度(Temperature&a…