2012-04-05 83 views
24

我想实现和春天有个购物车,所以我需要保存对象Cart(其中有同类产品,paymentType和deliveryType属性)会话。我试图用bean和属性“scope”设置为“session”来创建它,但它不起作用,我应该在我的控制器或类中使用一些额外的注释吗?任何示例用法都会非常有用:-)提前致谢。春存储对象的会话

回答

26
@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); 
} 
+0

是的,“替代选项”的作品,但我不想使用它。当我在我的控制器中创建一个私人属性购物车时,我得到错误,“没有匹配的bean发现依赖性:预计至少1有资格作为这个依赖关系的autowire候选者的bean。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}“。这个bean应该在applicationContext.xml中定义为 tomaszf 2012-04-05 20:12:55

+1

没有dispatcher-servlet.xml文件或者,像我展示 - 。声明的注解 – Bozho 2012-04-05 20:23:56

+0

嗯,但是当我在调度-servlet.xml中使用注解,没有bean定义,我得到我之前粘贴错误,再加上当我使用注释并定义bean时,我只能用该控制器获得404。 – tomaszf 2012-04-05 20:41:14

13

如果直接注射购物车到您的控制器,那么问题可能发生,因为你的控制器是单身作用域(默认) ,它比你注入的bean范围更广。这篇优秀的文章概括介绍了您正在尝试做的四种方法:http://richardchesterwood.blogspot.co.uk/2011/03/using-sessions-in-spring-mvc-including.html

这里是解决方案的快速摘要:

  1. 范围控制器会话范围(在控制器级别使用@scope("session")),只是在控制器的购物车实例。
  2. 控制器可以请求并注入会话范围的购物车。
  3. 直接使用会话 - 有点混乱,国际海事组织。
  4. 使用Spring的注释<aop:scoped-proxy/>

所有的方法都有其利弊。我通常选择2或4选走4实际上是非常简单,是我见过documented by Spring.的唯一方法

+0

正确的URL是http:// richardchesterwood。 blogspot.co.uk/2011/03/using-sessions-in-spring-mvc-including.html – Gilead 2012-10-17 15:52:20

+0

谢谢@Gilead。我更新了正确的网址。 – 2012-10-17 17:29:59

+0

请注意,在解决方案#4中,不要在任何方法中使用final。这样做并且该访问者将是单身人士,而不是会话范围,因为AOP不能拦截总决赛。 – 2013-11-26 06:08:31

2

你只需要与会话和代理模式如下添加注释范围

@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