Spring Singleton与Singleton设计模式 - 类加载器

时间:2013-06-13 14:36:46

标签: java spring design-patterns singleton classloader

Singleton Pattern在Spring Container Level维护实例,而Singleton Design Pattern在Class Loader Level维护它。

还有其他区别吗?

接下来,我仍然认为上述原因并非正当理由。事实上,一个Application Context / Container只加载到一个Class Loader中。因此从技术上讲没有区别。 这是正确的还是我遗失了什么?

参考:Singleton design pattern vs Singleton beans in Spring container

5 个答案:

答案 0 :(得分:2)

嗯,真正的区别不在于类加载,而在于设计原则。单身模式有它自己的局限性。它在全局范围内公开了一个对象,并且很难测试。但是,像Spring或Guice这样的单一框架可以解决这些问题。

SO thread可以帮助您理解。以及Google-singleton-detectorMisko Hevery's blog也很有趣。

答案 1 :(得分:1)

使用“真实”单例更具限制性,因为您必须能够仅创建该类的单个实例(在类加载器中)。

如果你使用Spring单例范围的bean,你可以创建你喜欢的那个类的“单例”实例(只要bean类不是真正的单例)。

因此,它们在技术上并不是一回事。

答案 2 :(得分:0)

这主要是这两者的共同名称。 Singleton模式确保一个类只有一个实例,而Spring的单例bean作用域只是指示容器在依赖注入期间使用bean的单个实例,bean可以是任何没有限制的类。

答案 3 :(得分:0)

spring singleton确保只要使用spring框架创建对象,就只创建一个对象实例。相反,实现单例模式确保仅存在对象的一个​​实例。

我见过在Spring配置中将对象定义为单例的代码。单例对象有时使用spring DI创建,有时使用new运算符创建。

因此,需要谨慎行事,以确保不会发生此类滥用行为,并保持单身单身。

答案 4 :(得分:0)

在每个类加载器级别描述单例模式。 单例bean范围是每个弹簧容器。

http://www.javabench.in/2012/04/difference-between-singleton-design.html