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