在代码审查中,出现了以下注释:“我认为,您实际上是要注入工厂作为实例,以便您可以在需要时重新绑定工厂。”和“重要提示:工厂不应是静态的,而应注入”。

Test.java:

Foo foo = FooFactory.get(argument);


FooFactory.java:

public final class FooFactory {
    public static Foo get(String argument) {
        return new Foo();
    }
}


否则我应该怎么做? “重新绑定”在审阅者的第一条评论中是什么意思?

最佳答案

通过执行操作,您基本上可以忽略依赖项注入,而改用静态工厂。因此,如果在单元测试中希望工厂返回Foo的伪实例而不是真实实例,则不能。

相反,您应该使用依赖项注入(此处为Spring示例):

public class SomeService
    private FooFactory fooFactory;

    @Autowired
    public SomeService(FooFactory fooFactory) {
        this.fooFactory = fooFactory;
    }

    public void someMethod(String arg) {
        Foo foo = fooFactory.create(arg);
        ...
    }
    ....
}


现在,在单元测试中,您可以注入所需的任何FooFactory实现(通常是模拟)。

关于java - 注入(inject)工厂-如何以及为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10641375/

10-09 05:15