我应该何时自动装配资源,而不是通过值将其传递给构造函数并将其设置为私有。
例如,
@Autowired
private SystemLogger systemLogger
VS
public class derp {
private SystemLogger systemLogger;
public derp(SystemLogger systemLogger){
this.systemLogger = systemLogger;
}
}
答案 0 :(得分:0)
由于SystemLogger
似乎是你的类的一个组成部分,我会将它作为构造函数参数传递。就个人而言,我认为这使得您的班级需要正确初始化的合作者更加明显。它也应该是最终的。
这也有利于让您的课程更容易使用模拟进行测试。你可以在一个地方使用Autowired
使用模拟,但这会涉及更多的努力(例如暴露setter
- 这可能是坏事,或者是模仿ApplicationContext
。
这可能只取决于个人喜好,但是对于它的价值,领导我参加的核心春季培训的春季顾问建议不要在班级成员上使用Autowired
。