这是您可以配置和/或依赖于Application Server的东西吗?我想知道在重新部署应用程序时是否会重建单个对象。
我宁愿在这里问一下,试着得到一个简洁的答案,而不是谷歌随机搜索或诉诸阅读J2EE Servlet规范 -
答案 0 :(得分:1)
不,它不会(至少没有我知道的应用服务器)。 servlet规范为您提供ServletContextListener挂钩来管理应用程序生命周期。一些应用程序服务器(如JBoss)对单例bean(@Service)有特殊注释,EJB 3.1为您提供@Singleton注释。使用单例时要考虑的另一件事是,当您对应用程序进行群集时会发生什么,您将需要高可用性(HA)或使用某种类型的复制,除非您使用无共享方法。分布式缓存很适合这个原因。
答案 1 :(得分:1)
这个问题的简短回答是否定的。我不知道任何表现出这种行为的Application Server。但是,有一些事情需要指出。以下是一个简单的解释:
当您的应用程序服务器(即JBoss与Tomcat)启动时,它会在类加载器中加载一些类,这些类将由所有应用程序共享。在部署应用程序时,它会将这些类加载到自己的类加载器中。取消部署应用程序时,将对该类加载器及其所有类进行垃圾回收。因此,在重新部署应用程序时,将重新加载所有类,并且将重新实例化您的单例。
您的应用程序(理论上至少)在重新部署后的行为相同,就像JVM / Application Server重启后一样。
最后一个提示:如果要在企业Java应用程序中使用Singleton Pattern,请确保您了解应用程序服务器环境中单例对象的限制。例如,如果要集中应用程序,则可能会遇到问题。