跳转至

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. 字段注入(不推荐)

@Service
public class UserService {
    @Autowired
    private UserDao userDao;
}

简单,但不能 final、不利于测试。

4. 方法注入

@Autowired
public void prepare(UserDao userDao) { ... }

二、对比

构造器 Setter 字段
final
不可变
可测试
循环依赖 报错 可以 可以
代码简洁

三、@Autowired vs @Resource

  • @Autowired:Spring 提供,按类型。
  • @Resource:JSR-250,按名称。

Spring 官方推荐

构造器注入。Spring Boot 4.x 起字段注入废弃。