Spring5學習隨筆-Set註入詳解和構造註入

来源:https://www.cnblogs.com/eyewink/archive/2023/11/15/17833532.html
-Advertisement-
Play Games

學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】 第四章、註入(Injection) 1.什麼是註入 通過Spring工廠及配置文件,為所創建對象的成員變數賦值 1.1為什麼需要註入 “通過編碼的方式,為 ...


學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】

第四章、註入(Injection)

1.什麼是註入

通過Spring工廠及配置文件,為所創建對象的成員變數賦值

1.1為什麼需要註入

“通過編碼的方式,為成員遍歷進行賦值,存在耦合”

1.2如何進行註入[開發步驟]

  • 類為成員變數提供set方法
  • 配置Spring的配置文件
<bean id="person" name="p,p1" class="com.baizhi.basic.Person">
    <property name="id">
        <value>10</value>
    </property>
    <property name="name">
        <value>xiaojr</value>
    </property>
</bean>

1.3註入好處

1.解耦合

2.Spring註入的原理分析(簡易版)

第五章、Set註入詳解

針對於不同類型的成員變數,在<property>標簽,需要嵌套其他標簽

1.JDK內置類型

1.1 String+8種基本類型

<value>suns</value>

1.2 數組

<list>
    <value>[email protected]</value>
    <value>[email protected]</value>
    <value>[email protected]</value>
</list>

1.3 Set集合

<set>
    <value>1239188123</value>
    <value>123813121</value>
    <value>130111111</value>
    <value>130111111</value>
</set>

<set>
	<ref bean=""/> // 什麼都能存
	<set></set>
</set>

1.4 List集合

<list>
    <value>zpark</value>
    <value>shangdi</value>
    <value>xierq</value>
</list>
<list>
	<ref bean=""/>
	<set></set>
</list>

1.5 Map集合

註意: map -- entry -- key有特定的標簽 <key></key>
			值根據對應類型選擇對應類型的標簽
<map>
    <entry>
        <key><value>suns</value></key>
        <value>4231324113</value>
    </entry>
    <entry>
        <key><value>chenvn</value></key>
        <ref bean=""/>
    </entry>
</map>

1.6 Properites

Properties類型 特殊的Map key=String value=String

<props>
    <prop key="key1">value1</prop>
    <prop key="key2">value2</prop>
</props>

1.7 複雜的JDK類型(Date)

需要程式員自定義類型轉換器,處理。

2.用戶自定義類型

2.1 第一種方式

  • 為成員變數提供set get方法

  • 配置文件中進行註入(賦值)

    <bean id="userService" class="com.baizhi.basic.UserServiceImpl">
        <property name="userDao" >
            <bean class="com.baizhi.basic.UserDaoImpl"></bean>
        </property>
    </bean>
    

2.2第二種方式

  • 第一種賦值方式存在的問題

    1. 配置文件代碼冗餘
    2. 被註入的對象(UserDao)多次創建,浪費(JVM)內容資源
  • 為成員變數提供set get方法

  • 配置文件中進行配置

    <!-- 第二種 賦值方式  先創建需要的dao對象-->
        <bean id="userDAO" class="com.baizhi.basic.UserDaoImpl"/>
        <bean id="userService" class="com.baizhi.basic.UserServiceImpl">
            <property name="userDao">
                <ref bean="userDAO"/>
            </property>
        </bean>
    #Spring4.x廢除了<ref local=""/>,基本等效 <ref bean=""/>
    

3.Set註入的簡化寫法

3.1基於屬性簡化

JDK類型簡化
<property name="name" value="suns"/>
註意:value屬性 只能簡化8種基本類型 + String註入標簽

用戶自定義類型
<property name="userDao" ref="userDao"/>

3.2 基於p命名空間簡化

<!-- p: 簡化寫法-->
	<bean id="person" class="xxx.Person" p:name="suns" p:id="100"/>

用戶自定義類型
<bean id="userDAO" class="xxx.UserDaoImpl"/>
<bean id="userService" class="xxx.UserServiceImpl" p:userDao-ref="userDAO" />

第六章、構造註入

  1. 註入:通過Spring配置文件為成員變數賦值
  2. Set註入:Spring調用Set方法 通過配置文件為成員變數賦值
  3. 構造註入:Spring調用構造方法 通過配置文件為成員變數賦值

1.開發步驟

  • 提供有參構造方法
  • Spring配置文件
<bean id="customer" class="com.baizhi.basic.constructer.Customer">
    <constructor-arg  value="suns"/>
    <constructor-arg  value="102"/>
</bean>

2.構造方法重載

2.1 參數個數不同時

  1. 通過控制標簽的數量進行區分

2.2構造參數個數相同時

  1. 通過在標簽隱入 type屬性 進行類型的區分

3. 註入的總結

  1. 未來的實戰中 ,應用set註入還是構造註入?

    答案:set註入更多

    1. 構造註入麻煩(重載)
    2. Spring框架底層 大量應用了 set註入

作者:揚眉劍出鞘
出處: https://www.cnblogs.com/eyewink/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 故事很老套。。就一堆漂亮姑娘毫無道理的、莫名其妙的往死里貼“我”,很煩人~只要略施小計,就能將她們攬入懷中,非常魔幻。 因為這游戲不只是火,同時還口碑超高。《美女包圍》剛發售時的好評率是83%,火了後評價不降反升,現在是恐怖的93%。 性感辣媽林樂清 —— 王星辰(身材姣好,入得廳堂下得廚房,娶妻當 ...
  • 定義 最短路樹:以圖上一個點為根節點,刪去部分邊後所形成的樹,樹的邊權滿足任意一點與根結點的路徑長度等於圖上兩點的最短路徑長度。 求法 可以採用 dij 求解。 每次更新 \(dis_v\) 時,記錄每個點最後一次用來更新的邊,即為最短路樹。 核心代碼如下,時間複雜度為 dij 的時間複雜度即 \( ...
  • 來源:juejin.cn/post/7023317351563001886 1、概述 SpringBoot框架不用多介紹,Java程式員想必都知道。相對來說熟悉Quarkus的人可能會少一些。Quarkus首頁放出的標語:超音速亞原子的Java(Supersonic Subatomic Java)。 ...
  • 概述 Java 中的引用類似 C 語言中的指針,指向一個對象,比如: // person 就是指向 Person 實例“張三”的引用 Person person = new Person("張三"); 在 JDK1.2 以前,Java 里的引用是很傳統的定義:如果 reference 類型的數據中存 ...
  • 1 前言 如果你正在準備軟體工程師或軟體開發人員的面試,那麼你可能知道由於其開放性質和廣泛性,準備系統設計是多麼困難,但同時你也不能忽略它。在軟體工程界,如果你正在申請高級工程師/主管/架構師或更高級別的角色,系統設計是最受追捧的技能,也是整個過程中最重要的環節之一。如果你搞砸了這個,其他的都不重要 ...
  • 關於Node.js的開發者來說,在開發機器上管理多個不同版本的Node.js是一個常見痛點。之前在開發者安全大全專欄中,提到過解決方法:使用nvm,如果對於nvm還不瞭解的話,可以前往瞭解。 對於TJ來說,因為習慣敲命令了,所以nvm其實已經夠用了。但是,有的小伙伴還是更喜歡可視化的管理工具。所以, ...
  • 我希望在職業生涯早期就開始做的事情和我希望以不同的方式做的事情。 大家好,我已經做了八年半的軟體工程師。這篇文章來源於我最近對自己在職業生涯中希望早點開始做的事情以及希望以不同方式做的事情的自我反思。 我在這裡分享的對任何希望提高和進步到高級甚至更高職位的初級至中級開發者都很有用。 0 大綱 我的職 ...
  • 資料庫事務是什麼?事務的四大特性是什麼? 1.資料庫事務 事務是一組原子性的 SQL 語句,或者說一個獨立的工作單元。如果資料庫引擎能夠成功地對資料庫應用該組操作的全部語句,那麼就執行該組查詢。如果其中任何一條語句因為崩潰或其他原因無法執行,那麼所有的語句都不會執行。也就是說,事務內的語句,要麼全部 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...