我正在尝试为我正在发放的图书馆制作一个立面。在我的外观中,我使用Guice来构造对象图。对象图中的深层是Proxy对象,它具有getURL / setURL方法。 在我的外观中,如何获取用于创建根对象的Proxy实例?我希望我的门面有url getter和setter。
我试过这样的事情:
public class SomeThingFacade() {
private final SomeThing thing;
private final HTTPProxy proxy;
public SomeThingFacade() {
MyModule module = new MyModule();
Injector injector = Guice.createInjector(module);
// this is the main class I'm making a facade for
this.thing = injector.getInstance(SomeThing.class);
// deep in the "thing" object graph is a Proxy implementation
this.proxy = injector.getInstance(HTTPProxy.class);
}
public void setURL(URL url) {
this.proxy.setURL(url);
}
}
但inject.getInstance创建了一个新实例。
在MyModule中绑定:
bind(Proxy.class).to(HTTPProxy.class).asEagerSingleton();
我以前在外观构造函数中对对象图进行了硬编码,但是对于30个对象来说它很笨拙。
基本上,我需要在创建后在对象图中深入配置一个实例,但我不确定如何抓住该实例。
答案 0 :(得分:1)
这看起来像一个很严肃的问题。但是,我无法弄清楚究竟是在问什么。
我的回答,看着代码并忽略了对象的图形说话(让我知道,如果我完全误解了你),是:
如果thing
的{{1}}取决于某个SomeThing
,则模块应将其配置为绑定到deep internal proxy
。第二个HTTPProxy
不会影响第一个getInstance
。你能以某种方式做出使proxy
影响thing
的事情的唯一方法是,如果HTTPProxy被绑定in(Singleton.class)
,那么通过调用代理上的方法来影响{{1}的成员和行为这也可能是HTTPProxy
内部的同一个实例,你可能正在做你正在寻找的东西。我不明白你为什么要这样做。请考虑编写一个配置thing
和/或制作一个特殊模块的提供程序,仅供外观使用。