Spring通过XML配置实现IoC,核心是容器接管对象创建与依赖管理;基础Bean定义需id和class属性,默认单例;支持set注入、构造器注入及scope、init-method等扩展配置。

Spring 使用 XML 配置实现控制反转(IoC),核心是把对象的创建和依赖管理交给容器,而不是用 new 手动创建。XML 文件(如 applicationContext.xml)就是告诉 Spring “哪些类要托管、怎么初始化、属性怎么赋值”。只要配置规范,Spring 启动时自动解析并实例化 Bean,你只需从容器中取用即可。
基础 Bean 定义:id、class 和默认行为
最简配置只需 id 和 class 属性:
-
id是 Bean 在容器中的唯一名称,用于后续通过getBean("xxx")获取实例 -
class指向全限定类名,Spring 通过反射调用其无参构造器创建对象 - 不写
id时,Spring 默认用类全名作标识符;但建议显式定义id,更清晰可控 - 默认作用域为
singleton,即整个应用中只存在一个实例
示例:
<bean id="userService" class="com.example.service.UserServiceImpl"/>
属性注入(Set 注入)
适用于已有无参构造器、且属性有 public setter 方法的类。Spring 会在对象创建后,自动调用对应 setter 赋值。
立即学习“Java免费学习笔记(深入)”;
- 用
<property name="xxx" value="yyy"/>注入基本类型或字符串 - 用
<property name="xxx" ref="anotherBeanId"/>注入其他 Bean 引用 - 支持嵌套属性、集合(
list/map)、空值等高级写法
示例:
<bean id="user" class="com.example.model.User"> <property name="name" value="张三"/> <property name="age" value="25"/> <property name="dao" ref="userDao"/> </bean>
构造器注入(Constructor 注入)
适合强制依赖、不可变对象或希望在构造阶段就完成初始化的场景。要求类提供匹配参数数量与类型的构造方法。
- 用
<constructor-arg value="xxx"/>按顺序注入字面量 - 用
<constructor-arg ref="xxx"/>注入其他 Bean - 可用
index或type属性明确指定参数位置或类型,避免歧义
示例:
<bean id="address" class="com.example.model.Address"> <constructor-arg index="0" value="北京市朝阳区"/> <constructor-arg index="1" value="100000"/> </bean>
常用扩展配置项
实际项目中常需微调 Bean 行为,这些属性直接写在 <bean> 标签内即可生效:
-
scope="prototype":每次getBean()都新建实例,适合有状态对象 -
init-method="init":指定初始化方法,在属性注入完成后自动调用 -
destroy-method="close":仅对单例有效,容器关闭前执行清理逻辑 -
lazy-init="true":延迟加载,首次获取时才创建,节省启动时间 -
name="a,b,c":支持多个别名,用任意一个都能取到该 Bean
不复杂但容易忽略


















