我发现了很多有关对类成员变量进行setter依赖注入的示例,但是发现很难找到关于使用spring方法内部局部变量对setter依赖注入的任何示例。
我怎样才能做到这一点?
最佳答案
您给定的TextEditor类正在使用的SpellChecker示例在它能够进行依赖注入之前可能看起来像这样。您正在使用该方法的方法内部创建SpellChecker类的新实例。
public class TextEditor {
public void doSomething() {
new SpellChecker().checkSpelling();
}
}
如果您希望解耦代码并能够通过模拟来替代SpellChecker以进行单元测试,或者要通过依赖注入容器提供的另一种实现来替换SpellChecker,则必须更改类并提供一个可以注入此实例的字段。
public class TextEditor {
@Autowired
private SpellChecker spellChecker;
public void doSomething() {
spellChecker.checkSpelling();
}
}
由于这仍然不容易测试,因为您将需要使用Reflection将模拟注入到该私有字段中,因此您可以提供Setter或通过从字段中删除修饰符来使该字段包可见。因此,同一包中的单元测试可以访问该字段并提供模拟。