JSF中的应用程序范围与Spring中的Singleton Scope之间的区别

时间:2013-10-18 18:42:59

标签: spring-mvc jsf-2

任何人都可以了解ApplicationScope(JSF)和Singleton(Spring MVC)之间的区别。我有一个用jsf编写的应用程序,其中一个类使用应用程序范围。在转换为spring时,我使用了Singleton作用域,我认为它略微等同于应用程序作用域。但是想深入了解在性能等方面两者之间究竟有什么不同。

1 个答案:

答案 0 :(得分:1)

两者的相似之处在于,一旦启动,它们将继续存在直到应用程序结束(或者类被垃圾收集,在取消部署之前,您不会在典型的Java EE应用程序中发生这种情况。)

  • 两者都是共享实例,您应该确保它们是线程安全的。

来自Java EE 7 Tutorial

  

@ApplicationScoped所有用户与Web应用程序交互的共享状态。

来自Spring Documentation

  

Spring的单例bean概念不同于Gang of Four(GoF)模式书中定义的Singleton模式。 GoF Singleton对对象的范围进行硬编码,使得每个ClassLoader创建一个且只有一个特定类的实例。 Spring单例的范围最好按容器和每个bean描述。这意味着如果在单个Spring容器中为特定类定义一个bean,那么Spring容器将创建该bean定义所定义的类的唯一一个实例。

因此,除非您使用后端单例bean来提供多个Web应用程序(比如在具有多个Web项目的EAR项目中) - 在这种情况下,如果停止/取消部署,Singleton Bean可能会比Application bean更长Web应用程序但不是EAR)或者在您的Web应用程序仍在运行时销毁您的Spring应用程序上下文(在这种情况下,您的Application Bean可能比您的Singleton Bean更长)两个生命周期非常相似。

无论如何,我认为混合Spring,JSF和DI xml / annotations不是一个好主意。 This article详细介绍了如何集成三者(也就是说,如何以一种只能使用其中一种注释技术的方式进行整合)。

所以,@Named @ApplicationScoped +确保你获得并发权利=利润! :)

相关问题