Setter注入是Spring中通过反射调用标准setter方法实现依赖注入的方式,要求类有无参构造器、符合JavaBean规范的setter方法,并在XML或注解配置中正确声明属性绑定。

Setter 注入是 Spring 中最基础、最直观的依赖注入方式,核心在于:类提供标准 setter 方法,Spring 容器通过反射调用它完成赋值。配置正确需满足三个前提——有无参构造器、有对应 setter、XML 或 Java 配置中明确声明属性绑定。
必须具备的类结构
目标类(如 BookServiceImpl)需满足:
- 声明私有引用类型字段(如
private BookDao bookDao;) - 提供公共的、符合 JavaBean 规范的 setter 方法(方法名以
set开头,参数类型与字段一致,无返回值) - 存在默认(无参)构造方法 —— Spring 先实例化对象,再调用 setter
XML 方式配置要点
在 applicationContext.xml 或其他 Spring 配置文件中:
- 先定义被依赖的 bean(如
bookDao),指定class - 再定义目标 bean(如
bookService),用<property>标签绑定:<property name="bookDao" ref="bookDao"/>
其中name是 setter 方法去掉set后的首字母小写形式(setBookDao→bookDao),ref指向已定义的 bean ID - 若注入的是基本类型或字符串,用
value属性:<property name="timeout" value="3000"/>
基于注解的等效写法(推荐现代用法)
不用 XML,改用 @Component + @Autowired:
立即学习“Java免费学习笔记(深入)”;
- 在 service 类上加
@Component,并在 setter 方法上加@Autowired - 例如:
public void setBookDao(@Autowired BookDao bookDao) { this.bookDao = bookDao; } - 确保开启组件扫描(
@ComponentScan)和注解驱动(<context:annotation-config/>或@EnableAspectJAutoProxy等)
常见错误与规避
容易出错的地方集中在三处:
- 忘记提供无参构造器 —— 若类只写了带参构造器,Spring 实例化失败
- setter 方法签名不匹配 —— 参数类型与字段类型不一致,或方法名不符合命名规范
- XML 中
name写错(如写成BookDao或setBookDao),导致找不到对应方法
只要类结构合规、配置项名称准确、容器能加载到所有相关 bean,Setter 注入就能稳定工作。它适合可选依赖或需要运行时重设的场景,但非强制依赖首选构造器注入。


















