日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

private final、@Autowired、@Resource你更喜歡哪個?

來源: 責編: 時間:2023-10-23 17:05:42 258觀看
導讀一、引言現在有一些流言,想必大多都是非Java程序員對Java程序員的稱謂或者嘲諷:“spring boy”。相信現在大家基本上都是使用的基于spring或者SpringBoot框架構建公司的各種業務應用,這個稱謂對我們來說也沒有啥了。不過

一、引言

現在有一些流言,想必大多都是非Java程序員對Java程序員的稱謂或者嘲諷:“spring boy”。ox328資訊網——每日最新資訊28at.com

相信現在大家基本上都是使用的基于spring或者SpringBoot框架構建公司的各種業務應用,這個稱謂對我們來說也沒有啥了。ox328資訊網——每日最新資訊28at.com

不過就有一種嘲諷的意思是脫離了Spring我們就不能開發了。ox328資訊網——每日最新資訊28at.com

不知道大家是什么感受,不過了不起不以為然,沒了spring就自己定義一套處理流程...ox328資訊網——每日最新資訊28at.com

不過目前了不起也還是使用spring生態,今天有個項目中出現了三種注入bean的方式,@Resource、@Autowired、private final,我們一起來看一看吧。ox328資訊網——每日最新資訊28at.com

二、Bean的注入

這里是一個簡單的示例代碼,演示了 @Resource、@Autowired和 private final三種注入方式的使用:ox328資訊網——每日最新資訊28at.com

publicclassMyService{@Resourceprivate MyDependency resourceDependency;@Autowiredprivate MyDependency autowiredDependency;privatefinal MyDependency finalDependency;publicMyService(MyDependency finalDependency){this.finalDependency = finalDependency;    }  // ...}publicclassMyDependency{// ...}

在上面的示例中,MyService類使用了三種不同的方式來注入 MyDependency依賴。ox328資訊網——每日最新資訊28at.com

@Resource和 @Autowired注解用于注入可變的依賴,而 private final方式用于注入不可變的依賴。ox328資訊網——每日最新資訊28at.com

這三種方式都是目前注入bean的方式,也常被面試官提及發問,不管你使用哪種方式,都是可以的。ox328資訊網——每日最新資訊28at.com

三、@Resource

@Resource的原理:@Resource注解是Java標準庫提供的一種依賴注入方式。ox328資訊網——每日最新資訊28at.com

在Spring中,@Resource注解的處理由 CommonAnnotationBeanPostProcessor類負責。ox328資訊網——每日最新資訊28at.com

該類是一個Bean后置處理器,用于處理使用了 @Resource注解的字段或方法參數。ox328資訊網——每日最新資訊28at.com

CommonAnnotationBeanPostProcessor在Spring的容器初始化過程中起作用,它會掃描所有的Bean定義,并檢查是否存在使用了 @Resource注解的字段或方法參數。ox328資訊網——每日最新資訊28at.com

當檢測到這樣的注解時,它會解析注解中指定的名稱(name),并嘗試查找匹配的依賴。ox328資訊網——每日最新資訊28at.com

具體地說,CommonAnnotationBeanPostProcessor使用了Java的反射機制來解析注解,并通過 javax.annotation.Resource規范中定義的算法來查找匹配的依賴。根據規范,@Resource注解默認按照字段或方法參數的名稱進行依賴的匹配,也可以通過 name屬性指定特定的依賴名稱。ox328資訊網——每日最新資訊28at.com

@Resource的使用方式:@Resource注解可以用于字段、方法和構造函數上,用于指定要注入的依賴。下面是幾種常見的使用方式:ox328資訊網——每日最新資訊28at.com

  • 字段注入:
publicclassMyService{@Resourceprivate MyDependency dependency;// ...}
  • 方法注入:
publicclassMyService{private MyDependency dependency;@ResourcepublicvoidsetDependency(MyDependency dependency){this.dependency = dependency;    }// ...}
  • 構造函數注入:
publicclassMyService{private MyDependency dependency;@ResourcepublicMyService(MyDependency dependency){this.dependency = dependency;    }// ...}

在上述示例中,@Resource注解用于標記要注入的依賴,并根據默認的名稱匹配規則或顯式指定的名稱來查找依賴。ox328資訊網——每日最新資訊28at.com

需要注意的是,@Resource注解是Java標準庫中的注解,因此它可以與Java SE和Java EE應用程序一起使用,不僅限于Spring框架。ox328資訊網——每日最新資訊28at.com

總結起來,@Resource注解是Java標準庫提供的一種依賴注入方式,在Spring中借助 CommonAnnotationBeanPostProcessor來實現。它可以用于標記要注入的依賴,并根據名稱匹配規則或顯式指定的名稱來查找依賴。ox328資訊網——每日最新資訊28at.com

四、@Autowired

當涉及到 @Autowired注解的原理、使用方式以及與 @Resource注解的區別時,我們需要了解它在Spring中的實現方式。下面我將詳細解釋 @Autowired的原理、使用方式以及與 @Resource注解的區別。ox328資訊網——每日最新資訊28at.com

@Autowired的原理:

@Autowired注解是Spring Framework提供的一種依賴注入方式。它通過 AutowiredAnnotationBeanPostProcessor類來實現。AutowiredAnnotationBeanPostProcessor是一個Bean后置處理器,用于處理使用了 @Autowired注解的字段、方法或構造函數參數。ox328資訊網——每日最新資訊28at.com

在Spring的容器初始化過程中,AutowiredAnnotationBeanPostProcessor會掃描所有的Bean定義,檢查是否存在使用了 @Autowired注解的字段、方法或構造函數參數。當檢測到這樣的注解時,它會解析注解,并根據依賴的類型來尋找匹配的Bean,并將其注入到目標對象中。ox328資訊網——每日最新資訊28at.com

具體來說,AutowiredAnnotationBeanPostProcessor使用了Java的反射機制來解析 @Autowired注解,并利用Spring容器中的Bean定義信息來查找匹配的依賴。它支持按照類型、名稱和限定符等方式進行依賴的解析和注入。ox328資訊網——每日最新資訊28at.com

@Autowired的使用方式:

@Autowired注解可以用于字段、方法和構造函數上,用于指定要注入的依賴。下面是幾種常見的使用方式:ox328資訊網——每日最新資訊28at.com

  • 字段注入:
public class MyService {    @Autowired    private MyDependency dependency;    // ...}```
  • 方法注入:
public class MyService {    private MyDependency dependency;    @Autowired    public void setDependency(MyDependency dependency) {        this.dependency = dependency;    }    // ...}```
  • 構造函數注入:
public class MyService {    private MyDependency dependency;    @Autowired    public MyService(MyDependency dependency) {        this.dependency = dependency;    }    // ...}```

在上述示例中,@Autowired注解用于標記要注入的依賴。Spring會根據依賴的類型(或名稱和限定符)自動查找匹配的Bean,并將其注入到目標對象中。ox328資訊網——每日最新資訊28at.com

@Autowired與@Resource的區別:

盡管 @Autowired和 @Resource都是用于依賴注入的注解,但它們在一些方面有一些區別。ox328資訊網——每日最新資訊28at.com

  1. 來源和依賴關系:@Autowired是Spring特有的注解,用于實現Spring的依賴注入機制。它通過類型匹配來解析依賴關系。而 @Resource是Java標準庫中的注解,它可以與Java SE和Java EE應用程序一起使用,不僅限于Spring框架。@Resource通過名稱匹配來解析依賴關系。
  2. 配置方式:@Autowired注解通常與 @Component、@Service等Spring注解一起使用,通過組件掃描和自動裝配來實現依賴注入。而 @Resource注解不需要特定的配置,它可以直接用于字段、方法和構造函數上。
  3. 名稱匹配規則:@Autowired注解默認按照類型進行依賴的匹配。如果存在多個匹配的Bean,可以使用 @Qualifier注解指定特定的Bean名稱或限定符。而 @Resource注解默認按照名稱進行依賴的匹配,也可以通過 name屬性指定特定的依賴名稱。
  4. 兼容性:由于 @Resource是Java標準庫中的注解,因此它可以與Java SE和Java EE應用程序一起使用,并且在不同的容器中具有較好的兼容性。相比之下,@Autowired注解是Spring特有的注解,主要用于Spring框架中,因此在非Spring環境中可能無法正常使用。
  5. Null處理:當無法找到匹配的依賴時,@Autowired注解的字段或方法參數可以為 null,而 @Resource注解要求必須找到匹配的依賴,否則會拋出異常。

需要注意的是,盡管 @Autowired和 @Resource有一些區別,但在大多數情況下,它們可以互換使用。ox328資訊網——每日最新資訊28at.com

如果您只是簡單地進行依賴注入,并且不需要關注兼容性問題,那么兩者的選擇取決于個人偏好。ox328資訊網——每日最新資訊28at.com

五、priavet final

private final字段的自動注入原理:

在Spring Boot中,對于 private final字段的自動注入,Spring使用構造函數注入(Constructor Injection)來實現。當一個Bean有一個或多個 private final字段需要注入時,Spring會嘗試在容器中查找與這些字段類型匹配的Bean,并使用構造函數注入來實例化Bean對象。ox328資訊網——每日最新資訊28at.com

構造函數注入的原理是,Spring會查找與構造函數參數類型匹配的Bean,并將它們作為參數傳遞給構造函數,從而實現對 private final字段的賦值。ox328資訊網——每日最新資訊28at.com

private final字段的使用方式:

在使用 private final字段進行自動注入時,需要遵循以下幾個步驟:ox328資訊網——每日最新資訊28at.com

  1. 定義一個帶有private final字段的類,并確保該類是一個Spring Bean。
@Componentpublic class MyService {    private final MyDependency dependency;    public MyService(MyDependency dependency) {        this.dependency = dependency;    }    // ...}```
  1. 在類的構造函數中接收依賴參數,并將其賦值給 private final字段。
  2. Spring Boot會自動掃描并創建Bean實例,同時檢測到帶有 private final字段的構造函數,會自動解析依賴并進行注入。

需要注意的是,由于 private final字段是不可變的,一旦注入后就無法修改。這種不可變性有助于確保字段的安全性和線程安全性。ox328資訊網——每日最新資訊28at.com

六、總結

了不起和大家聊的springBean三種注入方式大家都爛熟于心了,具體使用還是看個人喜好,并無優劣之分。ox328資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-14609-0.htmlprivate final、@Autowired、@Resource你更喜歡哪個?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 揭示Lombok的代碼設計缺陷:探索封裝問題

下一篇: Go并發可視化解釋:sync.WaitGroup

標簽:
  • 熱門焦點
  • K60 Pro官方停產 第三方瞬間漲價

    雖然沒有官方宣布,但Redmi的一些高管也已經透露了,Redmi K60 Pro已經停產且不會補貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機在停產之后
  • 2023 年的 Node.js 生態系統

    隨著技術的不斷演進和創新,Node.js 在 2023 年達到了一個新的高度。Node.js 擁有一個龐大的生態系統,可以幫助開發人員更快地實現復雜的應用。本文就來看看 Node.js 最新的生
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個人開發仿造稿定設計的圖片編輯器到現在,不知不覺已過去一年時間了,期間我經歷了裁員失業、面試找工作碰壁,寒冬下一直沒有很好地履行計劃.....這些就放在日
  • 一個注解實現接口冪等,這樣才優雅!

    場景碼猿慢病云管理系統中其實高并發的場景不是很多,沒有必要每個接口都去考慮并發高的場景,比如添加住院患者的這個接口,具體的業務代碼就不貼了,業務偽代碼如下:圖片上述代碼有
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 2納米決戰2025

    集微網報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領先地位的英特爾,甚至初成立不久的新
  • 質感不錯!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
  • SN570 NVMe SSD固態硬盤 價格與性能兼具

    SN570 NVMe SSD固態硬盤是西部數據發布的最新一代WD Blue系列的固態硬盤,不僅閃存技術更為精進,性能也得到了進一步的躍升。WD Blue SN570 NVMe SSD的包裝外
  • 利用職權私自解除被封帳號 Meta開除20多名員工

    11月18日消息,據外媒援引知情人士表示,過去一年時間內,Facebook母公司Meta解雇或處罰了20多名員工以及合同工,指控這些人通過內部系統以不當方式重置用戶帳號,其
Top 主站蜘蛛池模板: 朝阳区| 乳源| 沛县| 平谷区| 苍山县| 富宁县| 德格县| 固镇县| 云和县| 沛县| 厦门市| 天镇县| 巴彦县| 仙游县| 渝北区| 东宁县| 星子县| 罗甸县| 雅江县| 定西市| 雷州市| 宜春市| 张家口市| 五华县| 太康县| 措勤县| 仁布县| 绵竹市| 永定县| 平顺县| 南阳市| 佛坪县| 梓潼县| 邯郸县| 苍溪县| 汤原县| 凤庆县| 栾川县| 青铜峡市| 神农架林区| 佛教|