Can anyone shade some light on the difference between ApplicationScope(JSF) and Singleton(Spring MVC). I have a application written in jsf in which one of the class uses application scope. And while converting to spring I used Singleton scope which I believe slightly equivalent to Application scope. But want to dig in deep to know what actually varies between both in areas such as performance etc.
1 回答
两者在某种意义上是相似的,一旦启动,它们将一直存在,直到应用程序结束(或者该类被垃圾收集,在典型的 Java EE 应用程序中不会发生这种情况,直到您取消部署)。
- 两者都是共享实例,您应该确保它们是线程安全的。
@ApplicationScoped 所有用户与 Web 应用程序交互的共享状态。
来自Spring 文档:
Spring 的单例 bean 概念不同于四人组 (GoF) 模式书中定义的单例模式。GoF Singleton 对对象的范围进行硬编码,以便每个 ClassLoader 创建一个且仅一个特定类的实例。Spring 单例的范围最好按照每个容器和每个 bean 来描述。这意味着如果您在单个 Spring 容器中为特定类定义一个 bean,那么 Spring 容器会创建该 bean 定义所定义的类的一个且只有一个实例。
因此,例如,除非您使用后端单例 bean 来服务多个 Web 应用程序(例如在具有多个 Web 项目的 EAR 项目中 - 在这种情况下,如果您停止/取消部署 Web,单例 Bean 可能会比应用程序 bean 寿命更长 -应用程序但不是 EAR)或在您的 Web 应用程序仍在运行的情况下破坏您的 Spring 应用程序上下文(在这种情况下,您的 Application Bean 可能比您的 Singleton Bean 寿命更长)两个生命周期非常相似。
无论如何,我认为混合 Spring、JSF 和 DI xml/注解并不是一个好主意。本文详细介绍了如何集成这三者(以及如何以一种您可以仅使用其中一种技术进行注释的方式进行集成)。
所以,@Named @ApplicationScoped
+ 确保你获得正确的并发性 = 利润!:)