spring中配置的bean是单例么?如何证明
比如,在spring的配置文件中,配置了如下的bean。
<bean id = "privilegeRoleBo"
class = "com.alibaba.tboss.biz.privilege.impl.PrivilegeRoleBoImpl"></bean>
上面的bean应该不是单例的,因为如果项目部署在集群上,集群的每台机器上都维护着一个名字为privilegeRoleBo的bean吧,这样的话,privilegeRoleBo这个bean就不是单例的吧?如果我要配置一个单例的bean,该如何配置呢?
另外,如何写一个小Demo,可以验证一下当前的bean是否是单例??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
楼上回答是正确的,Java 的单例必须限定在一个 JVM 中,就像是
Servlet 只会存在一个实例
这句话也是限定在一个 JVM 中的,如果是多个 JVM 就会每个 JVM 存在一个实例。实际上,对于很多情况来说,实例不能在多个 JVM 上互相迁移不存在很大的问题,比如数据库连接或者是只读的配置文件信息类。但是如果想要多 JVM 同步,则必须使用其他的方法,比如文件锁、分布协调服务等等。打个比方,HttpSession 对象则是采用了 JVM 迁移的方式进行同步的。java语言层面的单例说的是同一个jvm里面,集群没办法搞。如果你想设置的单例目的是为了数据共享,那数据存数据库或是redis之类的地方
集群单例的问题楼上已经说了,我说说怎么验证当前的bean是否是单例,你可以在把项目跑起来 开debug模式,发送两次请求,查看使用的
privilegeRoleBo
这个bean的地址是不是一样的,如果一样就是单例的bean有一个属性scope