5

我发现了很多关于类成员变量的setter依赖注入的例子,但是发现很难找到任何关于使用spring的方法内部的局部变量的setter依赖注入的例子。

我怎样才能做到这一点?

4

2 回答 2

1

您给定的 TextEditor 类使用的 SpellChecker 示例在它能够进行依赖注入之前可能看起来像这样。您正在使用它的方法内创建类 SpellChecker 的新实例。

public class TextEditor {

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

}

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

public class TextEditor {

    @Autowired
    private SpellChecker spellChecker;

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

}

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

于 2012-09-15T17:43:33.937 回答
1

似乎不可能将依赖项注入方法的局部变量或任何局部范围,甚至是静态局部范围。
原因很简单,因为没有办法通过反射注入它,反射不提供任何允许访问方法的局部变量的 API。
你可以在这里阅读更多内容:https ://stackoverflow.com/a/24249500/11035655 。

于 2021-11-17T06:54:12.623 回答