我想实现和春天有个购物车,所以我需要保存对象Cart
(其中有同类产品,paymentType和deliveryType属性)会话。我试图用bean和属性“scope”设置为“session”来创建它,但它不起作用,我应该在我的控制器或类中使用一些额外的注释吗?任何示例用法都会非常有用:-)提前致谢。春存储对象的会话
春存储对象的会话
回答
@Component
@Scope("session")
public class Cart { .. }
然后
@Inject
private Cart cart;
应该工作,如果是在网络环境(调度员servlet.xml的)声明。另一种选择是使用原始的会话,并把你的车对象有:
@RequestMapping(..)
public String someControllerMethod(HttpSession session) {
session.addAttribute(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")
),只是在控制器的购物车实例。 - 控制器可以请求并注入会话范围的购物车。
- 直接使用会话 - 有点混乱,国际海事组织。
- 使用Spring的注释
<aop:scoped-proxy/>
。
所有的方法都有其利弊。我通常选择2或4选走4实际上是非常简单,是我见过documented by Spring.的唯一方法
正确的URL是http:// richardchesterwood。 blogspot.co.uk/2011/03/using-sessions-in-spring-mvc-including.html – Gilead 2012-10-17 15:52:20
谢谢@Gilead。我更新了正确的网址。 – 2012-10-17 17:29:59
请注意,在解决方案#4中,不要在任何方法中使用final。这样做并且该访问者将是单身人士,而不是会话范围,因为AOP不能拦截总决赛。 – 2013-11-26 06:08:31
你只需要与会话和代理模式如下添加注释范围
@Component
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class ShoppingCart implements Serializable{
}
在哪里无论你需要使用购物车对象,就可以自动装配它
@Service
public class ShoppingCartServiceImpl implements ShoppingCartService {
Logger logger = LoggerFactory.getLogger(ShoppingCartServiceImpl.class);
@Autowired
ShoppingCart shoppingCart;
}
披露:我已经开发了一个示例项目,它使用Spring MVC的,演示春季会议范围angularJS和引导 -
https://github.com/dpaani/springmvc-shoppingcart-sample
- 1. 春季会议存储对象
- 2. 在PHP会话中存储对象
- 3. 在会话中存储对象
- 4. 在会话中存储对象时会话变量问题
- 5. 如何压缩会话/缓存中存储的对象?
- 6. 存储会话
- 7. PHP - OOP - 存储大对象在会话中保存
- 8. 将用户对象保存在会话存储中
- 9. 检查会话存储中是否存在JSON对象javascript
- 10. 存储和检索对话对象
- 11. 如何读回存储在会话中的对象?
- 12. 将用户对象存储到会话中的安全性
- 13. 如何将对象类存储到PHP中的会话中?
- 14. 关于在会话中存储整个LINQ对象的想法?
- 15. PHP完整的对象图不存储在会话
- 16. ASP.NET MVC 3 - LINQ到存储在会话中的SQL对象
- 17. 存储整个Facebook的图形对象插入到PHP会话
- 18. ASP.NET会话和存储使用COM互操作的对象
- 19. 存储在会话中的域对象正在分离
- 20. 使用会话bean或在会话中存储自定义对象?
- 21. Asp.net会话存储
- 22. rails3会话存储
- 23. 存储在会话
- 24. IOS会话存储
- 25. 会话和内存中的对象
- 26. 缓存或存储会话?
- 27. 护照js如何在会话中存储用户对象?
- 28. 如果不在会话中,如何临时存储ActiveRecord对象?
- 29. 在会话变量中存储PHP对象
- 30. 如何通过JavaScript访问Java会话对象存储JSP
是的,“替代选项”的作品,但我不想使用它。当我在我的控制器中创建一个私人属性购物车时,我得到错误,“没有匹配的bean发现依赖性:预计至少1有资格作为这个依赖关系的autowire候选者的bean。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}“。这个bean应该在applicationContext.xml中定义为 –
tomaszf
2012-04-05 20:12:55
没有dispatcher-servlet.xml文件或者,像我展示 - 。声明的注解 – Bozho 2012-04-05 20:23:56
嗯,但是当我在调度-servlet.xml中使用注解,没有bean定义,我得到我之前粘贴错误,再加上当我使用注释并定义bean时,我只能用该控制器获得404。 – tomaszf 2012-04-05 20:41:14