Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Guice对象图中获取对象_Java_Dependency Injection_Guice - Fatal编程技术网

Java 在Guice对象图中获取对象

Java 在Guice对象图中获取对象,java,dependency-injection,guice,Java,Dependency Injection,Guice,我正试图为我正在分发的图书馆做一个门面。在facade中,我使用Guice构建对象图。在对象图的深处是一个代理对象,它具有getURL/setURL方法。 在facade中,如何获取用于创建根对象的代理实例?我希望我的外观具有url getter和setter 我试过这样的方法: public class SomeThingFacade() { private final SomeThing thing; private final HTTPProxy proxy;

我正试图为我正在分发的图书馆做一个门面。在facade中,我使用Guice构建对象图。在对象图的深处是一个代理对象,它具有getURL/setURL方法。 在facade中,如何获取用于创建根对象的代理实例?我希望我的外观具有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(Proxy.class).to(HTTPProxy.class).asEagerSingleton();
我以前在facade构造函数中硬编码了对象图,但是它很难处理30个对象


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

这看起来是一个非常严肃的问题。然而,我不知道到底问了什么

我的答案是:

如果
thing
SomeThing
依赖于
深层内部代理
,则模块应将其配置为绑定到thing的
HTTPProxy
。第二个
getInstance
不影响第一个。您可以通过某种方式做一些事情,使
proxy
影响
thing
的唯一方法是将HTTPProxy绑定到(Singleton.class)中,然后通过调用代理上的方法来影响
HTTPProxy
的成员和行为,这也是
thing
内部的同一个实例,您可能正在做您想要做的事情。我不明白你为什么要这样做。不要考虑编写一个提供代码“HTTPProxy > <代码>和/或只为外观使用的特殊模块的提供者。

这看起来完全是一个很严肃的问题。然而,我不知道到底问了什么

我的答案是:

如果
thing
SomeThing
依赖于
深层内部代理
,则模块应将其配置为绑定到thing的
HTTPProxy
。第二个
getInstance
不影响第一个。您可以通过某种方式做一些事情,使
proxy
影响
thing
的唯一方法是将HTTPProxy绑定到(Singleton.class)中,然后通过调用代理上的方法来影响
HTTPProxy
的成员和行为,这也是
thing
内部的同一个实例,您可能正在做您想要做的事情。我不明白你为什么要这样做。不要考虑编写一个提供代码“HTTPProxy > <代码>和/或只为外观使用的特殊模块的提供者。基本上,我需要在创建后在对象图中配置一个实例,但是我不知道如何得到那个实例的保存。我想我暗示了你并没有真正掌握它。除非是单身。使用注入,必须在注入对象之前对其进行配置。在这种情况下,您的模块应该为对象或提供者定义一个提供方法。可能带有特定于实例的注释。因此,如果您的facade需要一个新的代理配置,请为facade定义一个特定的模块来实现这一点。基本上,我需要在创建后在对象图的深处配置一个实例,但我不确定如何获得该实例。我想我暗示您没有真正获得它,除非它恰好是一个单实例。使用注入,必须在注入对象之前对其进行配置。在这种情况下,您的模块应该为对象或提供者定义一个提供方法。可能带有特定于实例的注释。因此,如果您的facade需要一个新的代理配置,那么为facade定义一个特定的模块来实现这一点。