首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring单例bean生命周期

Spring单例bean生命周期
EN

Stack Overflow用户
提问于 2011-07-14 00:00:25
回答 1查看 3.5K关注 0票数 2

我想知道Spring中单例bean (用@Scope(value="singleton")注释)的生命周期是如何准确定义的。

具体地说,可以保证在相同的ApplicationContext中连续查找该bean会返回相同的bean对象实例吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-14 00:04:24

是的,这就是singleton作用域的定义:每次调用getBean()只返回一个实例。请注意,非惰性singleton是Spring中的默认作用域。

另外,如果singleton被定义为lazy,并且没有其他非lazy bean引用它,那么它将在第一次显式查找时被创建。

EDIT:回答你的评论:偶尔你可能会发现你的单例被创建了两次。以此bean为例:

代码语言:javascript
运行
复制
@Service
@Transactional
public class Singleton {
    public Singleton() {
        System.out.println("Created: " + this.getClass());
    }
}

尽管这是一个单例,但您的程序可能会生成以下输出:

代码语言:javascript
运行
复制
Created: class com.example.Singleton
Created: class com.example.Singleton$$EnhancerByCGLIB$$f8ccc422

构造函数已经被调用了两次-一次是针对原始类,第二次是针对CGLIB创建的类,用于在没有任何接口的类上实现代理。为了保留Singleton公共接口,CGLIB生成的类必须是原始类的子类。这样,CGLIB类就可以在需要Singleton的地方使用(多态性)。但是子类必须调用基类构造函数,因此需要调用两个构造函数。

但是不用担心,CGLIB生成的类只是一个存根,它将所有调用重定向到一个“普通”bean,同时应用AOP内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6681907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档