在阅读了 Google Guice 的许多代码示例后,我看到很多代码如下所示:
public class MyModule implements Module {
public void configure(Binder binder) {
binder.bind(Service.class).to(ServiceImpl.class);
}
}
public class Widget {
private Injector injector = Guice.createInjector(new MyModule());
public void doSomething() {
Service service = injector.getInstance(Service.class);
service.run();
}
}
据我了解,显式调用 IoC 机制的代码(例如 Guice 中的 injector.getInstance(Class<T>)
或 Spring 中的 appContext.getBean(String)
)确实是 IoC 反模式。
在这些示例中,我注意到没有提及 @Inject
或@ImplementedBy
注释,我相信这是 Guice 针对这种反模式的解决方法。
如何重写上面的代码片段,以便我不手动/显式调用注入(inject)器?我希望配置所有内容,以便执行到 doSomething()
时方法,应用程序已经“知道”什么 Service
我们将使用的实现...
提前致谢!
最佳答案
通过将 Guice 添加到模块并在需要时使用注释注入(inject)它,让 Guice 了解您的 Widget
。
您需要将 Service
添加到其构造函数中:
public class Widget {
private final Service service;
@Inject
public Widget(Service service) {
this.service = service;
}
}
关于java - 我如何重写此代码片段,以便我不手动/显式调用注入(inject)器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8853044/