spring - 如何使用spring依赖注入(inject)局部变量?

标签 spring dependency-injection

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

我该怎么做?

最佳答案

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

public class TextEditor {

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

}

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

public class TextEditor {

    @Autowired
    private SpellChecker spellChecker;

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

}

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

关于spring - 如何使用spring依赖注入(inject)局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12439512/

相关文章:

java - 如何防止购物车中出现重复商品?

java - Multipart transferTo 在使用 createTempFile 时查找错误的文件地址

c# - 是否可以在创建 Autofac LifetimeScope 后向其添加注册?

dependency-injection - 马克·西曼(Mark Seemann)关于 SCSS 注入(inject)的矛盾说法。需要澄清

javascript - 如何识别 javascript 中函数的参数名称?

spring - 在多个项目中显示tag.properties

java - 无法访问 Spring Controller

java - spring messages.properties 使用变量名

java - 通过 bean 名称编写可选的 bean 依赖注入(inject)

c# - 在 ASP.NET Core DI 容器中注入(inject)一条记录可以吗?