比如,在spring的配置文件中,配置了如下的bean。
<bean id = "privilegeRoleBo"
class = "com.alibaba.tboss.biz.privilege.impl.PrivilegeRoleBoImpl"></bean>
上面的bean应该不是单例的,因为如果项目部署在集群上,集群的每台机器上都维护着一个名字为privilegeRoleBo的bean吧,这样的话,privilegeRoleBo这个bean就不是单例的吧?如果我要配置一个单例的bean,该如何配置呢?
另外,如何写一个小Demo,可以验证一下当前的bean是否是单例??
上記の答えは正しいです。
Servlet 只会存在一个实例
と同様に、この文も JVM ごとに 1 つずつ制限されます。実際、多くの場合、データベース接続や読み取り専用の構成ファイル情報クラスなど、複数の JVM 間でインスタンスを移行できないという大きな問題はありません。ただし、複数の JVM を同期する場合は、ファイル ロック、配布調整サービスなどの他の方法を使用する必要があります。たとえば、HttpSession オブジェクトは、JVM 移行を使用して同期されます。Java言語レベルのシングルトンは同じjvmを参照しており、クラスタは使用できません。設定したいシングルトンがデータ共有用である場合、データはデータベースまたは redis のような場所に保存する必要があります
クラスターのシングルトンの問題については、デバッグ モードでプロジェクトを実行し、2 つのリクエストを送信して、使用されている
privilegeRoleBo
を確認する方法について説明します。 Bean のアドレスが同じである場合、それらはシングルトンですBean にはプロパティ スコープがあります