如何在java中创建一个真正的单例?

rjo*_*shi 5 java singleton absolute

在多个类加载器中使用时,我遇到了我的单例问题.例如,Singleton由多个EJB访问.有没有办法创建一个在所有类加载器中只有一个实例的单例?

我正在寻找使用自定义类加载器或其他方式的纯java解决方案.

Jon*_*eet 5

唯一的方法是让你的单例类由一个类加载器加载 - 例如,将该jar文件放在bootclasspath中.

静态变量固有地绑定到类加载器,后者加载包含该变量的类.这就是它的工作方式.如果您只需要一个实例,则需要该类仅由一个类加载器加载.


ska*_*man 5

JavaEE应用服务器通常通过将单例设置为"服务"来解决此问题,其确切的定义和配置取决于所讨论的应用程序服务器.

例如,在JBoss中,您可以使用xyz-service.xml描述符来设置挂起JNDI或JMX树的单例对象,并且您的应用程序组件(例如您的EJB)将从树中获取单例.这在某种程度上保护了您与底层的类加载器语义.

  • 好的,请了解如何在Glassfish中创建JMX服务,并从组件连接到该服务. (2认同)