首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring Bean 配置全解析:XML 元素屬性詳解、生命周期、集合注入與自動裝配實戰

     編輯:Java 綜合教學

Spring Bean 配置全解析:XML 元素屬性詳解、生命周期、集合注入與自動裝配實戰

Spring IoC 容器的核心是 Bean 定義與依賴管理。本文系統梳理 <bean> 標籤全屬性、<property> 依賴注入細節、集合類型注入、Bean 生命周期回調、三種獲取 Bean 方式,附帶完整 XML 範例。

一、<bean> 標籤核心屬性速查表

二、自動裝配模式

屬性作用取值/說明
idBean 唯一標識符XML ID 類型,容器內唯一,用於 ref 引用、getBean() 獲取
nameBean 別名(可多個)逗號/分號/空格分隔,如 name="userService,usrSvc"
class全限定類名如 com.example.UserServiceImpl,容器反射實例化
singleton單例/原型模式true(默認,單例)/false(原型,每次獲取新實例)
depends-on強制依賴初始化順序指定 Bean 名,容器保證依賴 Bean 先初始化
init-method初始化回調方法無參方法名,如 init,Bean 創建後調用
destroy-method銷毀回調方法無參方法名,如 close,容器關閉前調用(僅單例生效)
lazy-init延遲初始化true:首次獲取時創建;false(默認):容器啟動時創建
autowire自動裝配模式見下表
dependency-check依賴檢查模式見下表

三、依賴檢查模式

模式匹配規則適用場景
byName屬性名 = Bean id屬性名與 Bean id 命名一致時
byType屬性類型 = Bean 類型類型唯一時,簡化配置
constructor構造函數參數類型匹配構造器注入場景
autodetect先 constructor 再 byType兼容模式
no不自動裝配(默認)顯式 <property> 控制

四、<property> 標籤與值注入詳解

基本屬性

  • name:屬性名(對應 setter 方法,如 setUserName → userName)
  • value:字面值(基本類型、String)
  • ref:引用其他 Bean(值為目標 Bean 的 id/name)

子標籤:<value>、<ref>、<list>、<set>、<map>、<props>

<bean id="userService" class="com.example.UserServiceImpl">
  <!-- 簡單值 -->
  <property name="retryCount" value="3" />
  <property name="serviceName">
    <value>UserService</value>
  </property>

  <!-- 引用 Bean -->
  <property name="userDao" ref="userDao" />
  <property name="cacheManager">
    <ref bean="cacheManager" /> <!-- 跨文件引用用 bean 屬性 -->
  </property>

  <!-- List 注入 -->
  <property name="interceptors">
    <list>
      <ref bean="authInterceptor" />
      <value>default</value>
    </list>
  </property>

  <!-- Set 注入(去重) -->
  <property name="roles">
    <set>
      <value>ADMIN</value>
      <value>USER</value>
    </set>
  </property>

  <!-- Map 注入 -->
  <property name="configMap">
    <map>
      <entry key="timeout" value="3000" />
      <entry key="dataSource" ref="dataSource" />
    </map>
  </property>

  <!-- Properties 注入 -->
  <property name="jdbcProps">
    <props>
      <prop key="url">jdbc:mysql://localhost:3306/db</prop>
      <prop key="username">root</prop>
    </props>
  </property>
</bean>

五、完整 Bean 定義範例

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
  "https://www.springframework.org/dtd/spring-beans.dtd">
<beans>
  <bean id="date" class="java.util.Date" />
  <bean id="helloWorld" class="com.dh.spring.HelloWorld"
        singleton="true" depends-on="date"
        lazy-init="false" init-method="init" destroy-method="destroy">
    <property name="message" value="Hello, Spring!" />
  </bean>
</beans>

六、Bean 生命周期

  1. 定義:XML 解析生成 BeanDefinition,註冊到容器。
  2. 實例化:反射調用構造函數創建實例(時機受 lazy-init 控制)。
  3. 屬性填充:依賴注入(setter/構造器/自動裝配)。
  4. 初始化前:BeanPostProcessor.postProcessBeforeInitialization。
  5. 初始化回調:init-method 指定方法 / InitializingBean.afterPropertiesSet() / @PostConstruct。
  6. 初始化後:BeanPostProcessor.postProcessAfterInitialization(AOP 代理在此生成)。
  7. 使用:業務邏輯調用 getBean() / 依賴注入獲取實例。
  8. 銷毀:容器關閉時,單例 Bean 調用 destroy-method / DisposableBean.destroy() / @PreDestroy。
  9. 七、三種獲取 Bean 的編程方式

模式檢查範圍
simple基本類型、String、集合
object引用對象
all以上全部
none不檢查(默認)

八、最佳實踐建議

  • 優先使用 ApplicationContext,Web 環境自動創建 XmlWebApplicationContext。
  • 顯式配置 id,避免依賴 name 別名造成歧義。
  • 集合注入優先用 <list>/<set>/<map> 子標籤,語義清晰。
  • 生命周期回調優先用 JSR-250 註解(@PostConstruct/@PreDestroy),無侵入、可測試。
  • 生產環境關閉 dependency-check(默認 none),避免啟動緩慢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方式核心類特點
BeanWrapperBeanWrapperImpl底層屬性訪問器,直接操作屬性,不涉及容器管理
BeanFactoryXmlBeanFactory(舊)、DefaultListableBeanFactoryIoC 容器基礎接口,延遲加載,功能精簡
ApplicationContextClassPathXmlApplicationContext、FileSystemXmlApplicationContext推薦:功能豐富(事件、國際化、AOP、生命周期)、啟動時預加載單例