我最近仔细考虑了spring mvc 3 beans scope,特别是web(会话,请求和全局会话),我有一些疑惑: 如果我有一个控制器,我为什么要用除了单身之外的其他范围来注释他?我的意思是,控制器被用来处理请求并实例化所有应用程序的视图资源,那么为什么要给它们一个例如会话范围呢?这样做有什么好处? 建议将服务层会话限定为范围? 最后,是否有任何约定或良好实践规定何时何地使用每个Web范围更方便?如果有的话,有人可以向我提供有关它的链接或信息吗?没有必要的约定或良好做法,也有你的经验。 非常感谢。
答案 0 :(得分:1)
我的意思是,控制器被用来处理请求和 实例化所有应用程序的视图资源,为什么要给他们一个,为 实例,会话范围?
在普通的Web应用程序中,每个会话都有各种对象。示例可以是用户配置文件,或某种柜子或钱包等。
为了能够在服务中使用这些对象,每次从会话中获取并通过服务链。当然最好不要在服务中使用那些,而不需要明确地传递它。
非常好的例子(在实践中)你可以找到here。
请求范围bean的理想实际示例是HttpServletRequest
,对于每个请求,它应该是唯一的,因此它是针对每个请求的请求范围和创建。
根据我的经验,在没有明确需要的情况下,您不需要为改变范围而烦恼自己。默认范围是Singleton并非没有理由,它是出于目的 - 因为在大多数应用程序和基本方案中,您需要bean作为单例。但是,由于您主要关注的是会话和请求范围,上面的示例是您在Web应用程序中经常需要的案例。