比如,在spring的配置文件中,配置了如下的bean。
<bean id = "privilegeRoleBo"
class = "com.alibaba.tboss.biz.privilege.impl.PrivilegeRoleBoImpl"></bean>
上面的bean应该不是单例的,因为如果项目部署在集群上,集群的每台机器上都维护着一个名字为privilegeRoleBo的bean吧,这样的话,privilegeRoleBo这个bean就不是单例的吧?如果我要配置一个单例的bean,该如何配置呢?
另外,如何写一个小Demo,可以验证一下当前的bean是否是单例??
樓上答案是正確的,Java 的單例必須限定在一個 JVM 中,就像是
Servlet 只会存在一个实例
這句話也是限定在一個 JVM 中的,如果是多個 JVM 就會每個 JVM 存在一個實例。實際上,對於許多情況來說,實例不能在多個 JVM 上互相遷移不存在很大的問題,例如資料庫連接或是唯讀的設定檔資訊類別。但如果想要多 JVM 同步,則必須使用其他的方法,例如檔案鎖、分佈協調服務等等。打個比方,HttpSession 物件則是採用了 JVM 遷移的方式進行同步的。java語言層面的單例說的是同一個jvm裡面,集群沒辦法搞。如果你想設定的單例目的是為了資料共享,那麼資料存資料庫或是redis之類的地方
集群單例的問題樓上已經說了,我說說怎麼驗證當前的bean是否是單例,你可以在把項目跑起來開debug模式,發送兩次請求,查看使用的
privilegeRoleBo
這個bean的地址是不是一樣的,如果一樣就是單例的bean有一個屬性scope