【发布时间】:2016-05-31 09:48:21
【问题描述】:
我已经编写了几个 Spring Boot 应用程序(目前,一个用于 Web,一个使用 JavaFX 和一些 CLI 应用程序)。 尽管一切都按预期工作,但我目前正在为桌面或命令行应用程序的一个特定概念而苦恼:@Services 和 @Component@Scope 注释强>s。
我最近阅读了很多为什么单例是“邪恶的”或至少是不受欢迎的,但对于桌面应用程序,我目前看不到其他方法来实现它,因为大多数时候单个实例在这些类型的应用程序中就足够了。
在 Guice 中,我会在我的模块中创建一个(非静态和非最终的)实例。在 Spring 中,我使用 @Scope("singleton")。
我现在想知道:这是一个干净的解决方案吗?还有其他解决方案吗?
问候, 丹尼尔
【问题讨论】:
-
单身并不邪恶,单身模式是邪恶的,但它们是不同的东西。不将事情单例化并将所有内容都设置为请求/会话范围甚至会使事情复杂化并使事情变得更加内存密集且性能更低。
-
更准确地说:静态单例模式是邪恶的,因为它使代码难以测试等。这并不意味着单例总是邪恶的并且应该避免. Spring 单例 bean 没有任何问题。
-
所以总结一下:我在使用单例范围注释服务方面没有做错任何事情。但如果我使用旧的单例模式,我会的。正确的?好的。也许那时有人可以做一个“真正的”答案(从 StackOverflow 的角度来看),我会投票并勾选它是正确的。其他偶然发现这一点的人会知道,什么是正确的,而无需阅读每条评论。提前致谢!
标签: java spring scope spring-boot desktop-application