首页 > spring中配置的bean是单例么?如何证明

spring中配置的bean是单例么?如何证明

比如,在spring的配置文件中,配置了如下的bean。

<bean id = "privilegeRoleBo" 
    class = "com.alibaba.tboss.biz.privilege.impl.PrivilegeRoleBoImpl"></bean>

上面的bean应该不是单例的,因为如果项目部署在集群上,集群的每台机器上都维护着一个名字为privilegeRoleBo的bean吧,这样的话,privilegeRoleBo这个bean就不是单例的吧?如果我要配置一个单例的bean,该如何配置呢?
另外,如何写一个小Demo,可以验证一下当前的bean是否是单例??


bean有一个属性scope


java语言层面的单例说的是同一个jvm里面,集群没办法搞。如果你想设置的单例目的是为了数据共享,那数据存数据库或是redis之类的地方


集群单例的问题楼上已经说了,我说说怎么验证当前的bean是否是单例,你可以在把项目跑起来 开debug模式,发送两次请求,查看使用的privilegeRoleBo这个bean的地址是不是一样的,如果一样就是单例的


楼上回答是正确的,Java 的单例必须限定在一个 JVM 中,就像是 Servlet 只会存在一个实例这句话也是限定在一个 JVM 中的,如果是多个 JVM 就会每个 JVM 存在一个实例。实际上,对于很多情况来说,实例不能在多个 JVM 上互相迁移不存在很大的问题,比如数据库连接或者是只读的配置文件信息类。但是如果想要多 JVM 同步,则必须使用其他的方法,比如文件锁、分布协调服务等等。打个比方,HttpSession 对象则是采用了 JVM 迁移的方式进行同步的。

【热门文章】
【热门文章】