如何使用Spring依赖注入的局部变量?

use*_*587 5 spring dependency-injection

我找到了许多有关对类成员变量进行setter依赖注入的示例,但发现很难找到关于使用spring方法内部局部变量对setter依赖注入的示例。

我怎样才能做到这一点?

ste*_*ase 1

您给出的 TextEditor 类使用的 SpellChecker 示例在能够进行依赖项注入之前可能如下所示。您正在使用 SpellChecker 类的方法内创建该类的新实例。

public class TextEditor {

    public void doSomething() {
        new SpellChecker().checkSpelling();
    }

}
Run Code Online (Sandbox Code Playgroud)

如果您想要解耦代码并能够通过用于单元测试目的的模拟或依赖注入容器提供的另一个实现来替换 SpellChecker,您必须更改该类并提供一个可以注入该实例的字段。

public class TextEditor {

    @Autowired
    private SpellChecker spellChecker;

    public void doSomething() {
        spellChecker.checkSpelling();
    }

}
Run Code Online (Sandbox Code Playgroud)

由于这仍然不容易测试,因为您需要使用反射将模拟注入该私有字段,您可以提供一个 Setter 或通过从字段中删除修饰符 private 来使字段包可见。因此,同一包中的单元测试可以访问该字段并提供模拟。