Spring Autowired vs Pass by Value

时间:2014-01-21 06:20:51

标签: spring autowired

我应该何时自动装配资源,而不是通过值将其传递给构造函数并将其设置为私有。

例如,

@Autowired
private SystemLogger systemLogger

VS

public class derp {
 private SystemLogger systemLogger;   
 public derp(SystemLogger systemLogger){
        this.systemLogger = systemLogger;
    }
}

1 个答案:

答案 0 :(得分:0)

由于SystemLogger似乎是你的类的一个组成部分,我会将它作为构造函数参数传递。就个人而言,我认为这使得您的班级需要正确初始化的合作者更加明显。它也应该是最终的。

这也有利于让您的课程更容易使用模拟进行测试。你可以在一个地方使用Autowired使用模拟,但这会涉及更多的努力(例如暴露setter - 这可能是坏事,或者是模仿ApplicationContext

这可能只取决于个人喜好,但是对于它的价值,领导我参加的核心春季培训的春季顾问建议不要在班级成员上使用Autowired