Dan*_*ler 21 java dependency-injection guice
也许我只是盲目,但我不知道如何使用Guice(刚开始)来替换new此方法中的调用:
public boolean myMethod(String anInputValue) {
Processor proc = new ProcessorImpl(anInputValue);
return proc.isEnabled();
}
Run Code Online (Sandbox Code Playgroud)
对于测试,可能会有一个不同的处理器实现,所以我想避免new调用,并在此过程中摆脱对实现的依赖.
如果我的类只记得处理器的一个实例,我可以通过构造函数注入它,但由于处理器被设计为不可变的,我每次都需要一个新的.
我将如何使用Guice(2.0)实现这一目标?
wax*_*ing 27
自从我现在使用Guice以来已经有一段时间了,但我记得有一种叫做"辅助注射"的东西.它允许您定义一个工厂方法,其中提供了一些参数并注入了一些参数.您可以注入处理器工厂,而不是注入处理器工厂,该工厂具有接受anInputValue参数的工厂方法.
我指向FactoryProvider的javadoc.我相信它应该对你有用.
Dav*_*ith 10
您可以通过注入"提供程序"来获得所需的效果,可以在运行时询问为您提供处理器.提供者提供了一种在请求之前推迟构造对象的方法.
提供商看起来像
public class ProcessorProvider implements Provider<Processor> {
public Processor get() {
// construct and return a Processor
}
}
Run Code Online (Sandbox Code Playgroud)
由于提供者是由Guice构建和注入的,因此他们自己可以注入比特.
你的代码看起来像
@Inject
public MyClass(ProcessorProvider processorProvider) {
this.processorProvider = processorProvider;
}
public boolean myMethod(String anInputValue) {
return processorProvider.get().isEnabled(anInputValue);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19123 次 |
| 最近记录: |