目录
简介
第一种 构造函数注入
构造函数注入的优点
第二种 字段注入
字段注入的优点
两者对比
总结
简介
在Spring框架中,@Autowired
注解用于自动装配Bean
它有两种常见的使用方式:字段注入和构造函数注入。
(以最简单的服务层来说明)
第一种 构造函数注入
private final UserMapper userMapper;@Autowired
public UserServiceImpl(UserMapper userMapper) {this.userMapper = userMapper;
}
这种方式中,UserMapper通过构造函数被注入到UserServiceImpl中。
构造函数注入的优点
更好的可测试性:因为依赖项是通过构造函数传入的,所以可以很容易地在测试中使用mock对象。
更安全的依赖关系:构造函数注入确保了依赖项在类的生命周期中不会改变,这使得依赖关系更加稳定和可预测。
明确的依赖关系:构造函数参数明确地展示了类的依赖,这有助于理解类的职责和所需资源。
第二种 字段注入
@Autowired
private final UserMapper userMapper;
这种方式中,UserMapper直接通过字段上的@Autowired注解被注入。
字段注入的优点
简洁性:代码更简洁,不需要额外的setter方法或构造函数。
即时可用:依赖项在类实例化时自动注入,可以立即使用。
两者对比
尽管字段注入在某些情况下可能看起来更简洁,但构造函数注入通常被认为是更优的选择,尤其是在依赖项不是可选的情况下。构造函数注入使得依赖关系更加明显,也更易于单元测试,因为它允许你轻松地提供不同的依赖项实例。
总结
在您的具体场景中,如果UserMapper
是必需的依赖项,那么使用构造函数注入(第一种方式)会更好,因为它提供了更清晰的依赖关系和更好的测试性。同时,使用final
关键字确保了userMapper
一旦在构造函数中被初始化后,就无法被重新赋值,这有助于保持对象的状态一致性。
(到底啦~更多内容!可关注vx公众号 : wmcode )