繁体   English   中英

在 Spring 启动应用程序中使用 scope 代理购物车

[英]Using scope proxy for shopping cart in Spring boot App

我有一个 spring 启动应用程序,其中有购物车功能。 我使用 scope 代理来存储购物车项目。 问题是当我尝试检索时购物车总是空的。

这是我的 ShoppingItem class:

@Data
@AllArgsConstructor
public class ShoppingItem {
    private String productId;
    private String quantity
}

我的购物车 class:

public class ShoppingCart extends ArrayList<ShoppingItem> implements Serializable {
}

我的 spring 配置 class 我声明 ShoppingCart bean:

@Configuration
public class MvcConfig {
   ....
   
   @Bean
   @Scope(
      value = WebApplicationContext.SCOPE_SESSION,
      proxyMode = ScopedProxyMode.TARGET_CLASS
   )
   public ShoppingCart shoppingCart(){
      return new ShoppingCart();
   }
}

我的购物车服务 class:

@Service
public class ShoppingCartService {
    
   @Autowired
   private ShoppingCart shoppingCart;

   public void add(String productId){
      // quick breakpoint check, I can see that product has been added
      shoppingCart.add(new ShoppingItem(productId, 1));
   }

   public int size(){
      return shoppingCart.size();
   }
}

我的产品控制器 class:

@Controller
@RequestMapping("/product")
public class ProductController {

   @Autowired
   private ShoppingCartService shoppingCartService;

   @PostMapping("/add-to-cart")
   public String addToCart(@PathVariable("productId") String productId){
   
      shoppingCartService.add(productId);
      ....
      return "return-to-a-page";
   }
}

最后是我的 ShoppingCartDetailsController:

@Controller
@RequestMapping("/product")
public class ShoppingCartDetailsController {
    
   @Autowired
   private ShoppingCartService shoppingCartService;
    
   @GetMapping("/get-shopping-cart")
   public String getShoppingCart(....){
       
      // this return zero :(
      System.out.println("Shopping Cart content : " + shoppingCartService.size());
      ....
      return "return-to-a-page";
   }
}

谢谢你的帮助!

好的,我通过将 scope 放在服务上而不是组件上来修复我的错误。 现在一切都像魅力一样

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM