[英]Spring Singleton Vs Singleton Design pattern - Class Loader
Singleton Pattern将实例维护在Spring容器级别,而Singleton Design Pattern将实例维护在Class Loader级别。
还有其他区别吗?
接下来,我仍然认为上述原因并非有效原因。 事实上,一个应用程序上下文/容器仅被加载到一个类加载器中。 因此在技术上没有区别。 是正确的,还是我缺少了什么?
好吧,真正的区别不在于类加载,而在于设计原理。 单例模式有其自身的局限性。 它在全局范围内公开对象,并且很难测试。 但是,通过像Spring或Guice这样的DI框架进行单例操作不会遇到这些问题。
该SO线程可以帮助您理解。 以及Google-singleton-detector和Misko Hevery的博客也很有趣。
从某种意义上说,使用“真实”单身人士的局限性更大,因为这样一来,您必然只能创建该类的单个实例(在类加载器中)。
如果使用Spring单例作用域的bean,则可以创建该类的任意多个“单例”实例(只要bean类不是真正的单例)。
因此,从技术上讲它们不是同一回事。
这主要是这两个名称的共同点。 Singleton模式可确保一个类只有一个实例,而Spring的singleton bean范围仅指示容器在依赖项注入期间使用bean的单个实例,而bean可以是不受限制的任何类。
弹簧单例确保只要使用spring框架创建对象,就只能创建该对象的一个实例。 相反,实现单例模式可确保仅存在该对象的一个实例。
我已经看到了在弹簧配置中将对象定义为单例的代码。 单例对象有时是使用spring DI创建的,有时是使用new运算符创建的。
因此,需要谨慎行事,以确保不进行此类滥用,并保持单一实例的单一实例。
在每个类加载器级别描述单例模式。 单例bean范围是每个spring容器。
http://www.javabench.in/2012/04/difference-between-singleton-design.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.