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>标签绑定:<property name="bookDao" ref="bookDao"></property>
其中name是 setter 方法去掉set后的首字母小写形式(setBookDao→bookDao),ref指向已定义的 bean ID - 若注入的是基本类型或字符串,用
value属性:<property name="timeout" value="3000"></property>
基于注解的等效写法(推荐现代用法)
不用 XML,改用 @Component + @Autowired:
- 在 service 类上加
@Component,并在 setter 方法上加@Autowired - 例如:
public void setBookDao(@Autowired BookDao bookDao) { this.bookDao = bookDao; } - 确保开启组件扫描(
@ComponentScan)和注解驱动(<annotation-config></annotation-config>或@EnableAspectJAutoProxy等)
常见错误与规避
容易出错的地方集中在三处:
- 忘记提供无参构造器 —— 若类只写了带参构造器,Spring 实例化失败
- setter 方法签名不匹配 —— 参数类型与字段类型不一致,或方法名不符合命名规范
- XML 中
name写错(如写成BookDao或setBookDao),导致找不到对应方法
只要类结构合规、配置项名称准确、容器能加载到所有相关 bean,Setter 注入就能稳定工作。它适合可选依赖或需要运行时重设的场景,但非强制依赖首选构造器注入。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











