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
答案 0 :(得分:2)
嗯,真正的区别不在于类加载,而在于设计原则。单身模式有它自己的局限性。它在全局范围内公开了一个对象,并且很难测试。但是,像Spring或Guice这样的单一框架可以解决这些问题。
这SO thread可以帮助您理解。以及Google-singleton-detector和Misko 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