在将会话范围赋予Spring MVC中的控制器方面,我需要一些反馈。
@Controller
@RequestMapping("/feedback/Controller")
@Scope(value = WebApplicationContext.SCOPE_SESSION,
proxyMode = ScopedProxyMode.TARGET_CLASS)
public class Feedback { ...
它使我可以轻松地在控制器中保持状态。我可以注入几个bean,然后在多个请求的整个会话中重用相同的bean。来自不同会话的请求不会冲突。效果就像一个控制器作用域。每个控制器在存储所有bean实例的会话中都有自己的对象。
这可能有点矫kill过正,因为控制器中的大多数代码都不会保持状态。
答案 0 :(得分:0)
这不是矫kill过正,而是非常糟糕的做法。它可能起作用并不意味着您应该那样做。
我们可以从回答几个问题开始。
为什么需要在bean内保持状态?它比HttpSession有什么好处?
如果您正在使用Sessions cope bean,您认为它存储在哪里?是的,它在HttpSession中!
您正在存储Bean,而不是仅将状态存储到HttpSession中。
缺点? 它引入了不必要的开销,并使会话序列化和反序列化更加复杂。考虑到您将横向扩展以拥有更多的应用服务器...
我将始终避免使用会话范围bean。