【发布时间】:2016-01-26 22:52:32
【问题描述】:
我正在开发 Spring MVC 应用程序,我需要为某些实用程序实现单例模式,例如:imageuploader 等。
我的问题是:以什么方式为这个实用程序实现单例,为这些类初始化 bean 并注入我需要的地方,如控制器、服务、DAO?或使用 static单例的字段实现以保留此类的实例?
【问题讨论】:
标签: spring spring-mvc
我正在开发 Spring MVC 应用程序,我需要为某些实用程序实现单例模式,例如:imageuploader 等。
我的问题是:以什么方式为这个实用程序实现单例,为这些类初始化 bean 并注入我需要的地方,如控制器、服务、DAO?或使用 static单例的字段实现以保留此类的实例?
【问题讨论】:
标签: spring spring-mvc
首先,尽量避免单例,因为它被认为是bad practice。此外,与非单例实例相比,它们与其他实例的交互也难以测试和验证。
如果你绝对需要它,我建议你使用 Spring bean,这样你就可以利用自动装配机制和 Spring 的 bean 生命周期。
有关详细信息,请参阅 Spring 参考文档的 Beans 部分。
【讨论】:
使用 Spring bean as 可以让您轻松地在单元测试中注入模拟。但是,您将只能从其他 Spring bean(或由 Spring bean 创建的传递对它的引用的对象)访问它。
另请参阅此问题中的讨论:Difference between static class and singleton pattern?
传统上,您会使用PropertyPlaceholderConfigurer 将配置文件从属性文件注入到 Spring Web 应用程序中。 This blog 讨论了使用 Spring 执行此操作的各种新方法。
【讨论】: