我有一个枚举,我注入到应用程序范围内,例如

public void contextInitialized(ServletContextEvent sce) {
       sce.getServletContext().setAttribute("app", ApplicationProperty.INSTANCE);
}


我的问题是,我必须使用不同的属性文件两次部署此Web应用程序。自从我使用枚举后,这会引起问题吗,它们会共享相同的值吗?谢谢。

应用程序使用不同的上下文路径和属性文件部署了两次(例如,secretKey = 12923,而另一个在属性文件中具有secretKey = 48984)。第一个实例将其部署为/ ForInternalUse,另一个实例将其部署为/ ForExternalUse。两种部署都在同一个Web应用程序服务器(glassfish)下。

PS。我已经对glassfish 3.1做了一个小测试,但是似乎属性没有共享。第二次部署不影响第一个部署。

最佳答案

这两个部署不会共享相同的enum-除非您明确共享它们之间的对象,否则它们将保持独立。

原因是enum仅对于加载它的类加载器是唯一的-在JVM范围内不是唯一的。 Web服务器为每个上下文提供了自己的类加载器。

有关您是否希望共享的信息,请参见here

关于java - java:将枚举注入(inject)应用程序范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25675458/

10-10 01:01
查看更多