首页 > 解决方案 > @Controller 或 @Restcontroller 类是否需要 @RequestScope 注释?

问题描述

我有一个简短的问题。我知道如果我想防止在处理多个传入请求时出现竞争条件和其他线程相关问题,我应该使用 @RequestScope 或 @SessionScope 注释服务。但是控制器也应该有这样的注释还是应该始终保持单例?

谢谢

标签: springspring-mvc

解决方案


并不真地。如果您的意图只是想防止由于并发请求引起的竞争条件,您仍然可以使用单例来实现它。只要确保它不包含任何包含某些状态的实例变量,控制器方法将修改这些状态​​。在实践中,将无状态的单例服务注入单例控制器是很常见的。理论上,单例控制器应该有最好的性能,因为它不需要每次都创建。

实际上使用的范围取决于用例。例如,如果您正在实现一个基于 Web 的购物车,您肯定需要查看会话范围控制器,以便添加到购物车的商品不会在同一会话中的两个 HTTP 请求之间消失。

我实现 RESTful Web 服务的经验是,我只使用单例控制器,因为 RESTful Web 服务的特征之一是无状态。


推荐阅读