Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.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 Dagger2-组件保持在应用程序中作为静态对象_Java_Android_Dagger 2 - Fatal编程技术网

Java Dagger2-组件保持在应用程序中作为静态对象

Java Dagger2-组件保持在应用程序中作为静态对象,java,android,dagger-2,Java,Android,Dagger 2,在我的应用程序类中,我将我的singleton Dagger组件作为一个静态对象,并通过它的静态getter方法到达它 public class MyApp extends Application { private static UtilsComponent utilsComponent; @Override public void onCreate() { ...... } publi

在我的
应用程序
类中,我将我的singleton Dagger
组件
作为一个静态对象,并通过它的静态getter方法到达它

public class MyApp extends Application {

        private static UtilsComponent utilsComponent;

        @Override
        public void onCreate() {
           ......
        }

        public static UtilsComponent getUtilsComponent(){
            if(utilsComponent == null){
                utilsComponent = DaggerUtilsComponent.builder()
                        .formattersModule(new FormattersModule())
                        .build();
            }
            return utilsComponent;
        }
}

我想知道的是,这样做对吗?它会引起问题吗?如果是这样的话,这些是什么?

这是可以的,但是您将无法以这种方式使用注入上下文相关对象。对于需要上下文的组件,在应用程序类中使用非静态访问器。
从更广泛的角度讲,将有尽可能多的组件,但若组件提供@Singleton注释的功能,那个么组件的生命周期就不应该比使用它的功能的生命周期长。

。但是为什么要把它放在
应用程序
类中呢?把它放在标准的单例类中,例如
Injector
。您可能仍然希望在
应用程序中初始化该单例,这很好。

为什么要在
应用程序中初始化该单例?有没有具体的原因?提供globlal(应用程序)
Context