我对这个话题有些疑惑。 在大多数 Spring bean(dao、服务和 Controller )的应用程序中,我们使用“请求”范围。这种方法允许我们减少内存使用并创建无状态层。但另一方面,我们在 Spring 上下文初始化的每个请求上都松散了性能。 我考虑创建一些 bean,例如DAO 层,在“单例”或“原型(prototype)”范围内。
您在应用程序中使用了哪些技术? 也许存在一些设计 Spring Web 应用程序 bean 范围的建议?
最佳答案
我在做决定时倾向于使用的一般规则如下:
长存状态
这是需要在多个请求 (http) 上保留状态的时候。在这种情况下,存储在 session 范围内是有意义的。
短暂的状态
当您需要为任何给定请求保留状态时。也许您正在为表单实现类似于支持 bean 的东西。在这种情况下,我使用了一个请求范围。
无状态
这是单例,默认由 spring 生成。除非我对状态有特定要求,否则这是我通常对所有 bean 坚持的选项。当然,它的性能也更高,因为该 bean 仅创建一次并供所有人使用。
在您的情况下,您的 DAO 和服务应该是无状态的(如果他们没有重新考虑您是如何实现它们的),因此应该是单例的。 Controller 应该再次成为单例,但问题是它们是否包含状态?。我不会太担心内存消耗,记住万恶之源是过早优化。坚持最佳做法,如果这不起作用,请修复它。
关于java - Web 应用程序中的 Spring beans 作用域。最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15145258/