我想使用 Guice 来生成实例(实际上是模块/依赖注入上下文的单例/单实例),但是将一些托管实例包装在代理中。
这背后的想法是围绕一些处理“一次一个”资源的项目添加一个同步层。我想出的唯一解决方案是创建两个注入器。
鉴于下面的代码,
public class ApplicationContext {
private Injector injector;
public <T> T get(Class<? extends T> cls) {
return injector.getInstance(cls);
}
public ApplicationContext() {
injector = Guice.createInjector(new Module() {
binder.bind(InterfaceOne.class).to(ImplementationOne.class);
binder.bind(InterfaceTwo.class).to(ImplementationTwo.class);
binder.bind(InterfaceThree.class).to(ImplementationThree.class);
});
}
}
}
whereImplementationThree
取决于InterfaceTwo
,ImplementationTwo
反过来取决于InterfaceOne
。
我现在想要的是,在ImplementationTwo
实例化之后,我想在将它注入到ImplementationThree
. 所以:
- 我想用 Guice
ImplementationOne
被注入ImplementationTwo
- 在
ImplementationTwo
被注入之前ImplementationThree
,我想把它包起来。
我希望看到的是一个 Guice 拦截器,它在依赖项的实例化和注入之后,但在它被移交给注入器上下文之前被调用。
我可以使用Provider
for ImplementationTwo
,但我不知道如何InterfaceOne
从 Guice 获取实例。