Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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 将AppModule保持为单例_Java_Guice - Fatal编程技术网

Java 将AppModule保持为单例

Java 将AppModule保持为单例,java,guice,Java,Guice,在我的独立应用程序中,当我需要从Guice获取一些对象实例时,我通常会这样做: injector = Guice.createInjector(new AppModule()); instance = injector.getInstance(MyInterface1.class); 我想知道: 为什么我需要传递AppModule类的实例,而不是模块类引用本身,以便Guice能够实例化它? 如果我将AppModule类保持为单例,因此在调用Guice.createInjector时总是使用同一

在我的独立应用程序中,当我需要从Guice获取一些对象实例时,我通常会这样做:

injector = Guice.createInjector(new AppModule());
instance = injector.getInstance(MyInterface1.class);
我想知道:

为什么我需要传递AppModule类的实例,而不是模块类引用本身,以便Guice能够实例化它? 如果我将AppModule类保持为单例,因此在调用Guice.createInjector时总是使用同一个实例,那么会产生什么副作用? 作为旁注:

注射器本身呢?如果我把它的一个实例放在某个地方,设计会有多糟糕? 将实例传递给createInjector允许您通过构造函数参数根据自己的喜好配置模块。Guice不会对模块进行变异,因此您可以保留它们,但更好的做法是您已经在做的事情:创建一个注入器,然后从那里引导您的应用程序。随着应用程序的增长,您将编写更多的模块,您不想自己管理这种复杂性

您不必维护对注入器的引用,因为您总是可以只注入它,尽管在有限的情况下这是合适的。将实际的依赖项注入到类中更有意义。这使得依赖关系层次结构清晰,代码更易于测试。

通过向createInjector传递实例,您可以通过构造函数参数根据自己的喜好配置模块。Guice不会对模块进行变异,因此您可以保留它们,但更好的做法是您已经在做的事情:创建一个注入器,然后从那里引导您的应用程序。随着应用程序的增长,您将编写更多的模块,您不想自己管理这种复杂性


您不必维护对注入器的引用,因为您总是可以只注入它,尽管在有限的情况下这是合适的。将实际的依赖项注入到类中更有意义。这使得依赖关系层次结构清晰,代码更易于测试。

好吧,我正在开发一个独立的应用程序,所以我不能期望@Injector。事实上,如果我可以@injection我的依赖项,我甚至不会使用这种方法。为什么你不能@injection你的依赖项呢?好吧,我正在处理一个独立的应用程序,所以我不能期望@Injector。事实上,如果我能@Inject我的依赖项,我甚至不会使用这种方法。为什么你不能@Inject你的依赖项呢?