spring4第4課-ioc控制反轉-詳解如何注入參數

堅持住,第四天,繼續學習spring4.詳解如何注入參數

先總結,主要有如下6種:

1,基本類型值;
2,注入 bean;
3,內部 bean;
4,null 值;
5,級聯屬性;
6,集合類型屬性;

詳解如下:↓↓↓↓↓

1,基本類型值;(前面第3課的依賴注入的屬性注入就是基本類型注入參數,這里不贅述)

? ? <bean id="people2" class="com.java1234.entity.People">

? ? ? ? ? <property name="id" value="1"></property>

? ? ? ? ? <property name="name" value="張三"></property>

? ? ? ? ? ?<property name="age" value="11"></property>
? ? </bean>


2,注入 bean;(第2課也學過,就是bean里面在ref引用另外一個bean,這里不贅述)

bean.xml內容

<bean id="dog1" class="com.java1234.entity.Dog"><property name="name" value="Jack"></property>
</bean>
<bean id="people2" class="com.java1234.entity.People"><property name="id" value="1"></property><property name="name" value="張三"></property><property name="age" value="11"></property><!--這里的dog是People類內定義的1個對象類名,而dog1是文件上面定義過的一個bean --><property name="dog" ref="dog1"></property>  
</bean>

People類的內容:

public class People {private int id;private String name;private int age;private Dog dog;   // 和bean.xml的name的dog一致

。。。。。。。。

}

3,內部 bean;(只能被內部引用,類似java的內部類)

<bean id="people3" class="com.java1234.entity.People"><property name="id" value="1"></property><property name="name" value="張三"></property><property name="age" value="11"></property><property name="dog"> <!--和第2種的差異就是,這里不用ref屬性了,使用bean標簽定義內部類--><bean class="com.java1234.entity.Dog">    <!--用bean標簽 定義內部類--><property name="name" value="Tom"></property></bean></property>
</bean>

4,null 值;(這玩意,用于強制清空默認值,避免隱式邏輯導致的意外行為)

? 使用頻率較低 , 隨便看看跳過吧

當需要為 Bean 屬性或構造函數參數賦予 null 值時,使用 null 標簽明確指示,避免 Spring 容器嘗試注入默認值或拋出異常。

<bean id="people4" class="com.java1234.entity.People"><property name="id" value="1"></property><property name="name" value="張三"></property><property name="age" value="11"></property><property name="dog"><null></null>   <!-- null標簽 表示沒有dog--></property>
</bean>

目前流行的強制清空默認值的替代處理方式是注解驅動,比如

4.1):使用 @Value 注入 null

@Component  
public class DataService {  @Value("#{null}") // SpEL 顯式賦 null  private String customStrategy;  
}  

4.2 條件化 Bean 注入

@Configuration  
public class AppConfig {  @Bean  @ConditionalOnProperty(name = "feature.cache.enabled", havingValue = "false")  public CacheManager cacheManager() {  return null; // 直接返回 null Bean  }  
}  


5,級聯屬性; (不常用,跳過)
6,集合類型屬性;?

三種集合類型List,Set,Map 以及Props(有點類似map,主要用于配置系統參數等),

幾種標簽寫法有差異,熟悉下,用時備查就行

?? ?<bean id="people6" class="com.java1234.entity.People">
?? ??? ?<property name="id" value="1"></property>
?? ??? ?<property name="name" value="張三"></property>
?? ??? ?<property name="age" value="11"></property>
?? ??? ?<property name="dog" ref="dog1"></property>
?? ??? ?<property name="hobbies"> ?<!-- 設置集合 -->
?? ??? ??? ?<list>
?? ??? ??? ??? ?<value>唱歌</value>
?? ??? ??? ??? ?<value>跳舞</value>
?? ??? ??? ?</list>
?? ??? ?</property>
?? ??? ?<property name="loves">
?? ??? ??? ?<set>
?? ??? ??? ??? ?<value>唱歌2</value>
?? ??? ??? ??? ?<value>跳舞2</value>
?? ??? ??? ?</set>
?? ??? ?</property>
?? ??? ?<property name="works">
?? ??? ??? ?<map>
?? ??? ??? ??? ?<entry>??<!--有key 和 value的鍵值對-->
?? ??? ??? ??? ??? ?<key><value>上午</value></key>
?? ??? ??? ??? ??? ?<value>寫代碼</value>
?? ??? ??? ??? ?</entry>
?? ??? ??? ??? ?<entry>

?? ??? ??? ??? ??? ?<key><value>下午</value></key>
?? ??? ??? ??? ??? ?<value>測試代碼</value>
?? ??? ??? ??? ?</entry>
?? ??? ??? ?</map>

?? ??? ?</property>
?? ??? ?<property name="addresses">
?? ??? ??? ?<props>? <!--有key 和 value的鍵值對-->
?? ??? ??? ??? ?<prop key="address1">aaaaa</prop>
?? ??? ??? ??? ?<prop key="address2">bbbbb</prop>
?? ??? ??? ?</props>
?? ??? ?</property>
?? ?</bean>

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

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

相關文章

cf2067A

原題鏈接&#xff1a;https://codeforces.com/contest/2067/problem/A 題目背景&#xff1a; 給定x,y&#xff0c;判讀是否存在 n 滿足S(n) x&#xff0c;S(n 1) y。定義 S(a) 等于 a 的十進制位數之和。 思路&#xff1a; 不難發現一般 n 和 n 1 的位數之和相差為 1&…

微信小程序獲取手機號

詳細代碼 <t-button size"large" theme"primary" variant"outline" data-type"hasCancelBtn" bind:tap"showDialog" block style"display: none;">開放能力按鈕 </t-button> <t-dialog id"t-…

AI重構SEO關鍵詞精準定位

內容概要 隨著AI技術深度滲透數字營銷領域&#xff0c;傳統SEO關鍵詞定位模式正經歷系統性重構。基于自然語言處理&#xff08;NLP&#xff09;的智能語義分析引擎&#xff0c;可突破傳統關鍵詞工具的局限性&#xff0c;通過解析長尾搜索詞中的隱含意圖與語境關聯&#xff0c;…

四足機器人環境監測系統相關問題

一、在設計四足機器人監測與跟蹤系統整體架構時&#xff0c;你主要考慮了哪些因素&#xff1f;為什么這樣設計以確保系統的高效性與穩定性&#xff1f; 在設計四足機器人監測與跟蹤系統整體架構時&#xff0c;主要考慮了傳感器兼容性與通信效率、多任務并發處理能力、實時數據…

uniapp 開發安卓app 微信授權獲取昵稱 頭像登錄

在manifest.json中配置appid 以及appsecret uni.login({provider: weixin,success: function (loginRes) {console.log(loginRes.authResult);// 獲取用戶信息uni.getUserInfo({provider: weixin,success: function (infoRes) {console.log(用戶昵稱為&#xff1a; infoRes.u…

MySQL8.4組復制

https://dev.mysql.com/doc/refman/8.4/en/group-replication.html 1 什么是組復制 組復制主要解決了傳統異步復制主機宕機時可能造成主從節點數據不一致問題MySQL Group Replication&#xff0c;簡稱MGR將原有的gtid復制功能進行可增強&#xff0c;支持單主模式和多主模式組復…

Python后端開發實戰:從0到1搭建高可用API服務

引言 Python憑借其簡潔的語法和豐富的生態(如Django、Flask、FastAPI等框架),已成為后端開發的主流語言之一。本文將結合一個真實電商API項目,分享從架構設計到部署上線的完整流程,并總結開發過程中常見的坑與最佳實踐。 一、實戰案例:電商API開發流程 1.1 技術選型 框…

本地部署大模型llm+RAG向量檢索問答系統 deepseek chatgpt

項目視頻講解: 本地部署大模型llm+RAG向量檢索問答系統 deepseek chatgpt_嗶哩嗶哩_bilibili 運行結果:

aws instance store 的恢復

1: aws instance store 要在launch instance 才可以創建,而且,通過snapshot 恢復后,instance store 里面的數據會丟失。 下面是創建instance store 的過程,和通過兩種方式恢復,發現/etc/fstab 不同的寫法,有的不能啟動: [root@ip-xx ~]# lsblk NAME MAJ:MIN RM …

React 生命周期與 Hook 理解解析

從生命周期到 Hook&#xff1a;React 組件演進之路 React 組件的本質是管理渲染與副作用的統一體。Class 組件通過生命周期方法實現這一目標&#xff0c;而函數組件則依靠 Hook 系統達成相同效果。 Class 組件生命周期詳解 生命周期完整流程 Class 組件生命周期可分為三大階…

數字孿生技術賦能西門子安貝格工廠:全球智能制造標桿的數字化重構實踐

在工業4.0浪潮席卷全球制造業的當下&#xff0c;西門子安貝格電子制造工廠&#xff08;Electronic Works Amberg, EWA&#xff09;憑借數字孿生技術的深度應用&#xff0c;構建起全球制造業數字化轉型的典范。這座位于德國巴伐利亞州的“未來工廠”&#xff0c;通過虛實融合的數…

從Homebrew找到openssl.cnf文件并拷貝到Go項目下使用

安裝OpenSSL 在 macOS 上下載和安裝 OpenSSL 最常見和推薦的方式是使用 Homebrew&#xff0c;這是一個 macOS 缺失的包管理器。 如果您還沒有安裝 Homebrew&#xff0c;請先安裝它。安裝 Homebrew 后&#xff0c;安裝 OpenSSL 只需要一條命令。 步驟 1&#xff1a;安裝 Home…

Qt 的簡單示例 -- 地址簿

這個工程里有兩個窗口&#xff0c;都是QWidget派生的窗口 主窗口&#xff1a; 1. 運用了布局&#xff0c;按鈕控件&#xff0c;單行編輯框&#xff0c;富文本編輯框等窗口部件&#xff1b; 2. 運用了 QMap 類&#xff1b; 3. 實現了點擊按鈕彈出子窗口的功能&#xff0c;這里子…

kubernate解決 “cni0“ already has an IP address different from 10.244.0.1/24問題

問題 NetworkPlugin cni failed to set up pod “coredns-5d4b4db-jkmnl_kube-system” network: failed to set bridge addr: “cni0” already has an IP address different from 10.244.0.1/24 解決方案 這個問題通常是由于Flannel網絡插件殘留配置導致的IP地址沖突。以下…

QT+opecv如何更改圖片的拍攝路徑

如何更改相機拍攝圖片的路徑 前言&#xff1a;基礎夯實&#xff1a;效果展示&#xff1a;實現功能&#xff1a;遇到問題&#xff1a;未解決&#xff1a; 核心代碼&#xff1a; 前言&#xff1a; 最近在項目開發中遇到需要讓用戶更改相機拍攝路徑的問題&#xff0c;用戶可自己選…

66常用控件_QTableWidget的使用

目錄 代碼示例:使用QTableWidget Table Widget 使? QTableWidget 表??個表格控件. ?個表格中包含若??, 每???包含若?列. 表格中的每個單元格, 是?個 QTableWidgetItem 對象. QTableWidget 核??法 方法說明item(int row, int column)根據行數數列獲取指定的…

記一次edu未授權訪問漏洞

首先進入該網址是一個登錄界面&#xff0c;查看源代碼&#xff0c;找到js文件&#xff0c;發現存在js.map前端信息泄露&#xff0c;于是我們進行js還原。 得到前端的一些源代碼&#xff0c;以及路由API等&#xff0c;我們就可以通過這個源代碼&#xff0c;進行目錄遍歷&#xf…

MySQL 索引和事務

目錄 前言 一、MySQL 索引介紹 1. 索引概述 2. 索引作用 3. 索引的分類 3.1 普通索引 3.2 唯一索引 3.3 主鍵索引 3.4 組合索引 (最左前綴) 3.5 全文索引 (FULLTEXT) 3.6 創建索引的原則依據 3.7 查看索引 3.8 刪除索引 二、MySQL 事務 1. 事務的 ACID 原則 MYS…

HTML實戰項目:高考加油和中考加油

設計思路 頁面加載后會自動顯示高考內容&#xff0c;點擊頂部按鈕可以切換到中考內容。倒計時會每秒更新&#xff0c;為考生提供實時的備考時間參考。 使用代表希望的藍色和金色漸變作為主色調 頂部導航欄可切換高考/中考內容 添加動態倒計時功能 設計勵志名言卡片和備考小貼…

What is Predictive Maintenance (PdM)? Learn How Industrial IoT Enables PdM

文章大綱 從預防性維護到預測性維護服務的轉變傳統預防性維護的局限性預測性維護的定義工業物聯網(IIoT)如何助力預測性維護預測性維護帶來的成本效益實施預測性維護面臨的挑戰企業轉向預測性維護的原因參考文獻大家好!今天,讓我們一起深入了解一下預測性維護技術。它正在徹…