【发布时间】:2013-10-12 21:08:39
【问题描述】:
我确实理解 Spring 单例范围的 bean(它们对于每个 Spring 上下文都有一个实例)和单例模式(它们对于类加载器有一个实例)之间的区别。
我注意到对于许多人来说,单例模式被认为是邪恶的(因为它们就像全局引用),而似乎没有人反对单例范围的 bean(它们也是全局可用的)。这是为什么呢?
我有一个(桌面)应用程序,我需要对某些对象进行全局访问,因为将引用传递给数十个类和方法会非常麻烦。但是我不想使用 DI 框架,因为应用程序的启动时间很重要。什么是最好的设计?
【问题讨论】:
-
我不想使用 DI 框架,因为应用程序的启动时间很重要 您测量过这两种方法之间的差异吗?是否非常重要,我的意思是,可能 5 或 10 秒真的很重要(我只是猜测,因为这是在 Web 应用程序服务器中部署包含 200 多个类的广泛应用程序所需的时间)?
-
您对会话范围的 bean 的看法是错误的。你真正的意思只是Spring单例。会话范围涵盖用户与 Web 服务器的一个会话,甚至在客户端桌面应用程序的上下文中没有任何意义。
-
@LuiggiMendoza 我认为 5-10 秒的启动时间对于桌面应用程序来说很重要,用户可以多次启动它......
-
@MarkoTopolnik 你说得对,我的意思是单例范围的 bean,我正在编辑问题
-
这将取决于应用程序类型和它将做什么。如果它是像 Eclipse 这样的大型应用程序,当然会花费一些时间,但如果它是像计算器这样的应用程序,我相信在您的应用程序中添加 spring 不会产生您可能想到的开销。为它做一个基本的测试。如果它不符合您的要求,请不要使用它。
标签: java spring design-patterns dependency-injection singleton