给Spring Controller Session范围的缺点。

时间:2018-08-04 03:25:32

标签: spring spring-mvc

在将会话范围赋予Spring MVC中的控制器方面,我需要一些反馈。

@Controller
@RequestMapping("/feedback/Controller")
@Scope(value = WebApplicationContext.SCOPE_SESSION,
               proxyMode = ScopedProxyMode.TARGET_CLASS)
public class Feedback { ...

它使我可以轻松地在控制器中保持状态。我可以注入几个bean,然后在多个请求的整个会话中重用相同的bean。来自不同会话的请求不会冲突。效果就像一个控制器作用域。每个控制器在存储所有bean实例的会话中都有自己的对象。

这可能有点矫kill过正,因为控制器中的大多数代码都不会保持状态。

1 个答案:

答案 0 :(得分:0)

这不是矫kill过正,而是非常糟糕的做法。它可能起作用并不意味着您应该那样做。

我们可以从回答几个问题开始。

为什么需要在bean内保持状态?它比HttpSession有什么好处?

如果您正在使用Sessions cope bean,您认为它存储在哪里?是的,它在HttpSession中!

您正在存储Bean,而不是仅将状态存储到HttpSession中。

缺点? 它引入了不必要的开销,并使会话序列化和反序列化更加复杂。考虑到您将横向扩展以拥有更多的应用服务器...

我将始终避免使用会话范围bean。