【问题标题】:java: injecting an enum into application scopejava:将枚举注入应用程序范围
【发布时间】:2014-09-04 21:44:47
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您正在部署您的应用程序两次,或者您有 2 个应用程序实例正在运行,您所说的共享(与谁)是什么意思?
  • 查看我对原始问题的修改。

标签: java jsp enums jstl


【解决方案1】:

这两个部署不会共享相同的enum - 它们是分开的,除非您专门在它们之间共享对象。

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

如果您想分享,请参阅here

【讨论】:

  • 谢谢。我的印象是枚举是 JVM-Wide 独有的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 2011-10-16
  • 2013-04-25
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多