一.问题
在spring中,Bean的scope默认为singleton。可能我们会把spring的singleton与设计模式中的singleon
类比然后等价。事实是:在spring中的singleton不是以单例模式创建,而是在容器中以单例存在。
二.源码分析(这里以spring3.2.0为例)
创建一个示例,通过调试找到入口在:org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean中,这里只贴出主要部分。
如果实例已经存在,则直接取出使用:
//获取已经注册的实例
Object sharedInstance = getSingleton(beanName);
//实例已经存在
if (sharedInstance != null && args == null) {
if (logger.isDebugEnabled()) {
if (isSingletonCurrentlyInCreation(beanName)) {
logger.