我发现了很多有关对类成员变量进行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或通过从字段中删除修饰符来使该字段包可见。因此,同一包中的单元测试可以访问该字段并提供模拟。

08-06 01:47