| 模式 | 檢查範圍 |
simple | 基本類型、String、集合 |
object | 引用對象 |
all | 以上全部 |
none | 不檢查(默認) |
四、<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 生命周期
- 定義:XML 解析生成
BeanDefinition,註冊到容器。
- 實例化:反射調用構造函數創建實例(時機受
lazy-init 控制)。
- 屬性填充:依賴注入(setter/構造器/自動裝配)。
- 初始化前:
BeanPostProcessor.postProcessBeforeInitialization。
- 初始化回調:
init-method 指定方法 / InitializingBean.afterPropertiesSet() / @PostConstruct。
- 初始化後:
BeanPostProcessor.postProcessAfterInitialization(AOP 代理在此生成)。
- 使用:業務邏輯調用
getBean() / 依賴注入獲取實例。
- 銷毀:容器關閉時,單例 Bean 調用
destroy-method / DisposableBean.destroy() / @PreDestroy。
七、三種獲取 Bean 的編程方式
| 方式 | 核心類 | 特點 |
| BeanWrapper | BeanWrapperImpl | 底層屬性訪問器,直接操作屬性,不涉及容器管理 |
| BeanFactory | XmlBeanFactory(舊)、DefaultListableBeanFactory | IoC 容器基礎接口,延遲加載,功能精簡 |
| ApplicationContext | ClassPathXmlApplicationContext、FileSystemXmlApplicationContext | 推薦:功能豐富(事件、國際化、AOP、生命周期)、啟動時預加載單例 |
八、最佳實踐建議
- 優先使用
ApplicationContext,Web 環境自動創建 XmlWebApplicationContext。
- 顯式配置
id,避免依賴 name 別名造成歧義。
- 集合注入優先用
<list>/<set>/<map> 子標籤,語義清晰。
- 生命周期回調優先用 JSR-250 註解(
@PostConstruct/@PreDestroy),無侵入、可測試。
- 生產環境關閉
dependency-check(默認 none),避免啟動緩慢。
- 上一篇文章: Java 基礎入門(一):Java 平台版本體系、跨平台原理、JDK/JRE 區別與環境變量配置實戰
- 下一篇文章: Java 核心類庫深度解析:System、Runtime、Math、Date 與 Calendar 實戰指南
Copyright ©
程式碼之家 All Rights Reserved