正确使用@Scope注释是Spring 3 Web应用程序

时间:2015-03-03 22:26:19

标签: spring spring-mvc spring-security spring-3

我最近仔细考虑了spring mvc 3 beans scope,特别是web(会话,请求和全局会话),我有一些疑惑: 如果我有一个控制器,我为什么要用除了单身之外的其他范围来注释他?我的意思是,控制器被用来处理请求并实例化所有应用程序的视图资源,那么为什么要给它们一个例如会话范围呢?这样做有什么好处? 建议将服务层会话限定为范围? 最后,是否有任何约定或良好实践规定何时何地使用每个Web范围更方便?如果有的话,有人可以向我提供有关它的链接或信息吗?没有必要的约定或良好做法,也有你的经验。 非常感谢。

1 个答案:

答案 0 :(得分:1)

  

我的意思是,控制器被用来处理请求和   实例化所有应用程序的视图资源,为什么要给他们一个,为   实例,会话范围?

在普通的Web应用程序中,每个会话都有各种对象。示例可以是用户配置文件,或某种柜子或钱包等。

为了能够在服务中使用这些对象,每次从会话中获取并通过服务链。当然最好不要在服务中使用那些,而不需要明确地传递它。

非常好的例子(在实践中)你可以找到here

请求范围bean的理想实际示例是HttpServletRequest,对于每个请求,它应该是唯一的,因此它是针对每个请求的请求范围和创建。

根据我的经验,在没有明确需要的情况下,您不需要为改变范围而烦恼自己。默认范围是Singleton并非没有理由,它是出于目的 - 因为在大多数应用程序和基本方案中,您需要bean作为单例。但是,由于您主要关注的是会话和请求范围,上面的示例是您在Web应用程序中经常需要的案例。