gpt4 book ai didi

java - 获取 Guice 对象图中的对象

转载 作者:太空宇宙 更新时间:2023-11-04 08:30:56 24 4
gpt4 key购买 nike

我正在尝试为我正在捐赠的图书馆制作一个外观。在我的外观中,我使用 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);
}
}

但是injector.getInstance创建了一个新实例。

在 MyModule 中绑定(bind):

bind(Proxy.class).to(HTTPProxy.class).asEagerSingleton();

我之前已经在外观构造函数中对对象图进行了硬编码,但是对于 30 个对象来说它变得笨拙。

基本上,我需要在创建后在对象图中深处配置一个实例,但我不确定如何获取该实例。

最佳答案

这看起来完全是一个很好的严肃问题。但是,我无法弄清楚到底在问什么。

我的答案是:查看代码并忽略 fascad 对象图讨论(如果我完全误解了您,请告诉我):
如果 thingSomeThing 依赖于深层内部代理,则模块应将其配置为绑定(bind)到 thing 的 HTTPProxy。第二个 getInstance 不会影响第一个。您可以以某种方式做一些使 proxy 影响 thing 的事情的唯一方法是,如果 HTTPProxy 绑定(bind)在 (Singleton.class) 中,那么通过调用代理上影响 HTTPProxy 的成员和行为的方法,这也可能是 thing 内部的同一实例,您可能正在做您正在寻找的事情。我不明白你为什么要这样做。考虑编写一个配置 HTTPProxy 的提供程序和/或制作一个专门用于外观的特殊模块。

关于java - 获取 Guice 对象图中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7541628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com