首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Spring 依賴注入詳解:構造器/Setter 注入、集合、內部 Bean、SpEL 等

     編輯:關於C++

核心注入方式

1. 構造器注入

<constructor-arg> 子標籤屬性:
index(參數位置,從 0 開始)、name(參數名,需編譯時保留或用 @ConstructorProperties)、type(類型)、value(值)、ref(引用其他 Bean)。
解決多構造函數歧義:優先用 type 或 name 限定。

2. Setter 注入

<property name="..." value="..."/> 或 ref="..."。Spring 調用無參構造器後呼叫 setter。
屬性名對應 JavaBean 規範(setXxx → xxx)。

3. 工廠方法注入

  • 靜態工廠:<bean class="..." factory-method="..."/>
  • 實例工廠:<bean factory-bean="..." factory-method="..."/>

進階配置

集合注入

<property name="list">
  <list><ref bean="a"/><value>str</value></list>
</property>
<property name="set">  <set>...</set> </property>
<property name="map">  <map><entry key="k" value-ref="v"/></map> </property>
<property name="props"> <props><prop key="k">v</prop></props> </property>

內部 Bean

在 <property> 或 <constructor-arg> 內直接定義 <bean>,無需 id,作用域為原型,僅供外層 Bean 使用。

Null 與空串

<property name="x"><null/></property>  <!-- setX(null) -->
<property name="x" value=""/>         <!-- setX("") -->

p / c 命名空間縮寫

<beans xmlns:p="https://www.springframework.org/schema/p" ...>
  <bean class="..." p:name="value" p:ref-ref="beanId"/>
</beans>

複合屬性名

<property name="apple.color" value="red"/> <!-- 需 apple 不為 null -->

Idref 防錯誤引用

<property name="target"><idref bean="someBean"/></property> <!-- 容器啟動時驗證 bean 存在 -->

類型轉換

Spring 內建 PropertyEditor 支援基本類型、字串、Class, Resource 等轉換。自定義轉換器可實現 Converter<S, T> 並註冊。

最佳實踐

  • 強制依賴用構造器注入,可選依賴用 Setter。
  • 集合盡量使用泛型,避免類型擦除問題。
  • 避免循環依賴(構造器注入會報錯,Setter 可配合 @Lazy 緩解)。
  • 外部化配置:屬性文件 + PropertyPlaceholderConfigurer。

Spring 4.x/5.x 仍完整支援 XML 配置,雖然 Java Config(@Configuration + @Bean)更流行,但理解 XML 註入細節對維護舊專案與深度除錯很有幫助。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved