Spring Bean 的注入方式¶
一、四种方式¶
1. 构造器注入(推荐)¶
@Service
public class UserService {
private final UserDao userDao;
public UserService(UserDao userDao) {
this.userDao = userDao;
}
}
优点:不可变、可测试、避免 NPE。Spring 4.3+ 单构造器不用 @Autowired。
2. Setter 注入¶
@Service
public class UserService {
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
3. 字段注入(不推荐)¶
简单,但不能 final、不利于测试。
4. 方法注入¶
二、对比¶
| 构造器 | Setter | 字段 | |
|---|---|---|---|
| final | ✅ | ❌ | ❌ |
| 不可变 | ✅ | ❌ | ❌ |
| 可测试 | ✅ | ✅ | ❌ |
| 循环依赖 | 报错 | 可以 | 可以 |
| 代码简洁 | 中 | 中 | 高 |
三、@Autowired vs @Resource¶
- @Autowired:Spring 提供,按类型。
- @Resource:JSR-250,按名称。
Spring 官方推荐
构造器注入。Spring Boot 4.x 起字段注入废弃。