比如,在spring的配置文件中,配置了如下的bean。
<bean id = "privilegeRoleBo"
class = "com.alibaba.tboss.biz.privilege.impl.PrivilegeRoleBoImpl"></bean>
上面的bean应该不是单例的,因为如果项目部署在集群上,集群的每台机器上都维护着一个名字为privilegeRoleBo的bean吧,这样的话,privilegeRoleBo这个bean就不是单例的吧?如果我要配置一个单例的bean,该如何配置呢?
另外,如何写一个小Demo,可以验证一下当前的bean是否是单例??
위의 답변은 정확합니다. Java 싱글톤은
Servlet 只会存在一个实例
과 마찬가지로 JVM이 여러 개 있는 경우 각 JVM에 대해 하나씩 제한됩니다. 실제로 데이터베이스 연결이나 읽기 전용 구성 파일 정보 클래스 등 여러 JVM 간에 인스턴스를 마이그레이션할 수 없는 경우가 많아 큰 문제는 없다. 그러나 여러 JVM을 동기화하려면 파일 잠금, 배포 조정 서비스 등과 같은 다른 방법을 사용해야 합니다. 예를 들어, HttpSession 객체는 JVM 마이그레이션을 사용하여 동기화됩니다.Java 언어 수준의 싱글톤은 동일한 JVM을 의미하므로 클러스터를 사용할 수 없습니다. 설정하려는 싱글톤이 데이터 공유를 위한 것이라면 데이터는 데이터베이스나 redis와 같은 장소에 저장되어야 합니다
클러스터 싱글톤의 문제는 위에서 언급했습니다. 현재 Bean이 싱글톤인지 확인하는 방법에 대해 설명하겠습니다. 디버그 모드에서 프로젝트를 실행하고 두 개의 요청을 보내고 사용된
privilegeRoleBo
을 확인할 수 있습니다. 빈 주소가 동일하다면 싱글톤입니다bean에는 속성 범위가 있습니다