用@Singleton注释的类是否必须遵循单例设计模式
我的猜测是,它们不需要:没有必要有一个私有构造函数和一个static .instance()方法,而是由Guice确保类的一个实例将被实例化。
发布于 2015-07-17 13:28:28
它们不仅不需要遵循单例模式,而且显式地不应该遵循它()。
使用Guice正确设置的系统应该创建尽可能少的自己的对象,而不是让框架完成所有的对象创建。此外,您做的是而不是,您希望系统中的随机类在这个静态实例上调用.instance(),最后,您不希望Guice使用.requestStaticInjection()在Singleton类中创建静态引用。
对于您的@Singleton类,正确的做法是将它们注入需要特定依赖项的类中。
发布于 2015-07-17 13:50:46
Guice中的单例与常规的单例之间的区别与上下文有关。
当你不使用Guice的时候,你必须自己管理你的独生子女。为了确保只创建了一个实例,您有一个私有构造函数、一个静态字段和访问该实例的方法(或者是一个getter,或者是将字段变为最终的)。这意味着实例是类加载器上下文中的单个实例。如果您创建另一个类加载器并告诉它加载您的单例类,则可以创建第二个实例。
当单例由Guice管理时,我们用@Singleton注释替换私有构造函数和静态字段,告诉注入器它只应该创建该类的一个实例,并在请求的任何地方使用它。因为可以同时使用多个注入器(因为需要两个完全不同的上下文,或者因为使用子注入器),所以不能阻止Guice实例化类的多个实例。
此外,由于您应该依赖Guice在任何地方提供单例(它是必需的),所以不需要包含单例实例的静态字段,因为它永远不会被访问。
https://stackoverflow.com/questions/31470844
复制相似问题