会话中的弹簧存储对象
2022-09-01 02:31:24
我想用Spring实现购物车,所以我需要在会话中保存一个对象(具有产品,付款类型和交付类型等属性)。我试图在bean和属性“scope”设置为“session”的情况下创建它,但它不起作用,我应该在我的控制器或类中使用一些额外的注释吗?任何示例用法都会非常有帮助:-)提前致谢。Cart
Cart
我想用Spring实现购物车,所以我需要在会话中保存一个对象(具有产品,付款类型和交付类型等属性)。我试图在bean和属性“scope”设置为“session”的情况下创建它,但它不起作用,我应该在我的控制器或类中使用一些额外的注释吗?任何示例用法都会非常有帮助:-)提前致谢。Cart
Cart
@Component
@Scope("session")
public class Cart { .. }
然后
@Inject
private Cart cart;
应该在 Web 上下文中声明它(dispatcher-servlet.xml)。另一种选择是使用原始会话并将购物车对象放在那里:
@RequestMapping(..)
public String someControllerMethod(HttpSession session) {
session.setAttribute(Constants.CART, new Cart());
...
Cart cart = (Cart) session.getAttribute(Constants.CART);
}
如果您将购物车直接注入控制器,则可能会发生此问题,因为您的控制器是单例范围的(默认情况下),其范围比您注入的Bean更宽。这篇优秀的文章概述了您正在尝试做的四种方法:http://richardchesterwood.blogspot.co.uk/2011/03/using-sessions-in-spring-mvc-including.html。
以下是解决方案的快速摘要:
@scope("session")
<aop:scoped-proxy/>
所有方法都有其优点和缺点。我通常选择选项2或4。选项4实际上非常简单,是我看到的Spring记录的唯一方法。