Tag: singleton

Guice:Singleton.class和@Singleton之间的差异

在Guice,有什么区别: // Inside your AbstractModule subclass: @Override public void configure() { bind(Service.class).to(ServiceImpl.class).in(Singleton.class); } 和: @Override public void configure() { bind(Service.class).to(ServiceImpl.class); } @Provides @Singleton public ServiceImpl providesService() { return new ServiceImpl(); } 它们都是一样的吗? 你什么时候使用一个? 提前致谢。

从域对象中访问Spring单例的好方法?

我有一个域模型,它由相当大的对象图组成,其中域对象正在创建其他域对象,依此类推。 为了各种目的,每个域对象都需要访问少量单例类型的辅助对象。 当我记得我已经在使用Spring时,我正准备使用Java单例模式实现它们,我可以使用Spring在应用程序启动时实例化这些帮助程序中的每一个。 我的问题是如何从我的域对象中找到它们? 这些都是通过“new”运算符创建的对象,并且不受Spring的控制。 我想我可以使用“getBean”方法,如果我掌握了Spring应用程序上下文(我没有) – 但这是好的表现吗? 我需要这些东西快速…以及如何快速获取应用程序上下文?

用jUnit测试单例

我有一个工厂类来检索我的应用程序的配置: public class ConfigurationFactory { private static ConfigurationFactory configurationFactory = new ConfigurationFactory(); private Configuration configuration = null; public static ConfigurationFactory getConfigurationFactory() { return configurationFactory; } 一些getConfiguration方法取决于我从哪里获取配置(文件,数据库,默认等…): public Configuration getConfiguration(String path){…} public Configuration getConfiguration(String database){…} 我的问题是,当我为每个方法进行unit testing时,我必须重新启动单例以便从不同的源加载,所以我唯一想到的就是添加这个: public void resetConfiguration() { this.configuration = null; } 我觉得我会因为这样做而烧掉开发人员的地狱:) 我的问题:没有添加此方法,还有其他方法吗? 注意:我已经看到了这个 ,我不能使用像Spring或Guice这样的任何DI框架,管理层认为添加一个框架会使项目变得重量级,因为这个程序旨在作为服务器上的守护进程运行。

Guice渴望/懒惰的单身实例化

我有一些麻烦,了解Guice的单例实例化是如何工作的。 我已阅读了可用的文档(此处为http://code.google.com/p/google-guice/wiki/Scopes ),但我仍然无法弄清楚一些事情: 1)我已经将Guice与Tomcat集成在一起,我在ServletModule中设置了一些绑定: bind(MyServlet.class).asEagerSingleton(); serve(“myUrl”).with(MyServlet.class); serve(“myOtherUrl”).with(MyOtherServlet.class); (其中MyOtherServlet类上面有一个@Singleton注释)我的意图是有两个servlet,其中一个是急切实例化的,而另一个则没有。 然而,似乎“serve … with …”行自动实例化servlet对象,即使该类未被绑定为急切的单例。 我上面提到的链接提到了在Stage.Development和Stage.Production下运行的Guice之间的区别 – 但是即使我明确使用了Stage.Development(无论如何都是默认的),这仍然会发生。 有什么方法可以避免这种情况吗? 2)(继续1)尝试确保MyServlet首先被实例化,即使所有servlet现在急切地实例化,我在创建Injector时修改了模块(和绑定语句)的顺序,以便首先显示MyServlet的绑定。 但是,我发现它仍然比其他一些绑定(非servlet类)实例化,其forms如下: bind(MyInterface.class).to(MyClass.class).asEagerSingleton() 即使这些其他绑定在模块/绑定顺序中稍后出现。 我调查了一下,发现Guice只是实例化了那些以“bind … to … asEagerSingleton()”的forms绑定的热切单身人士,然后才进行“bind … asEagerSingleton()”,所以我通过修改行来解决它:bind(MyServlet.class).asEagerSingleton(); into:bind(MyServletDummyInterface.class).to(MyServlet.class).asEagerSingleton() 这实际上有效。 尽管如此,我宁愿避免使用虚拟接口来解决这个问题,所以我想知道是否有人有更好的解决方案..? 3)我有两个Guice模块 – 一个ServletModule和一个AbstractModule。 ServletModule configureServlets()中包含以下绑定: serve(“aUrl”).with(SomeServlet.class); AbstractModule的configure()具有以下绑定: bind(SomeImpl.class).asEagerSingleton(); bind(SomeInterface.class).to(SomeImpl.class).in(Singleton.class); 此外,SomeServlet类具有SomeInterface类型的注入字段,并且在类的顶部具有@Singleton注释。 现在,人们可以期望在创建注入器时,SomeImpl类将被实例化,并且相同的实例将被注入SomeServlet实例。 如前所述,带有“serve … with …”语句的servlet似乎也得到了热切的实例化,但无论哪种方式,都应该只有一个SomeImpl对象被实例化。 但由于某种原因,我在执行此操作时实例化了两个SomeImpl对象。 为了解决这个问题,我将configure()中的两行混合了一下,而不是上面的那些我有以下几行: bind(SomeImpl.class).in(Singleton.class) bind(SomeInterface.class).to(SomeImpl.class).asEagerSingleton(); 然后它工作正常,我只有一个实例化SomeImpl的实例。 我真的不明白为什么开关应该重要 – 我可以看到后一种方式是如何“更好”,但我希望两者都能正常工作,所以我只是想知道我是不是在这里弄错了.. ? 抱歉长度, […]

单例类方法的并发调用

我有一个单身人士class: public class Singleton { private static Singleton istance = null; private Singleton() {} public synchronized static Singleton getSingleton() { if (istance == null) istance = new Singleton(); return istance; } public void work(){ for(int i=0; i<10000; i++){ Log.d("———–", ""+i); } } } 并且多个线程正在调用work()函数: public class Main { public static void main(String[] args) { new […]

集群环境中的Spring Singleton

正如本文所讨论的,不适合在集群环境中使用单例(因为不同JVM中有多个单例对象),对于Spring框架创建的单例,这一点必须如此。 如果这是正确的,那么我们必须非常小心使用Spring框架来使用单例类。 你能否告诉我这是否正确理解?

以单例模式使用CDI

我正在尝试在一个按照单例方法实现的类中注入一个logger对象。 代码几乎看起来像这样: Logger类: public class LoggerFactory { @Produces public Logger getLogger(InjectionPoint caller){ return Logger.getLogger(caller.getMember().getDeclaringClass().getName()); } } 然后我创建一个需要logger并实现Singleton模式的类: public class MySingleton{ @Inject private Logger logger; private MySingleton instance; /* * Private constructor for singleton implementation */ private MySingleton(){ logger.info(“Creating one and only one instance here!”); } public MySingleton getInstance(){ if(instance == null) { instance = new […]

Spring单例和Java singeleton(设计模式)有什么区别?

我正在学习Spring框架,目前正在阅读一本关于它的书。 在本书中,它说Spring单例与Java单例不同? 这是什么意思,有什么区别? 谢谢

使用Singleton类初始化/访问ArrayList

我在我的应用程序中使用ArrayList。 我想知道从Singleton类初始化ArrayList的确切过程。 该数据将用于其他一些活动。 有人可以帮助了解Singleton类吗?

Java Singleton设计模式:问题

我最近接受了采访,他向我询问了Singleton Design Patterns有关它们是如何实现的,我告诉他使用静态变量和静态方法我们可以实现Singleton Design Patterns。 他似乎对答案感到满意,但我想知道 我们可以用多少种方法在Java中实现Singleton Design Pattern? Singleton Object的范围是什么?它在JVM中的实际工作方式是什么? 我知道我们总是会有一个Singleton Object的实例,但是该对象的实际范围是什么,是在JVM中还是运行多个应用程序而不是它的范围是在JVM中的每个上下文基础上,我真的很难过无法给出令人满意的解释? 最后他问是否可以使用带有Clusters的Singleton Object和解释,当我们调用Bean Factory来获取对象时,有没有办法让Spring不实现Singleton Design Pattern? 关于Singleton的任何意见都会受到高度赞赏,在处理Singletons时要记住哪些主要内容? 谢谢。