My Enterprise应用程序需要Singleton ShoppingCart对象(每个用户),此cart对象在技术上不应该是静态的(这可能会导致内存泄漏)。
我是否需要对代码进行更改(或)将任何模式应用于Web应用程序,以实现每个用户的单例?
public final class ShoppingCartSingleTon {
private static ShoppingCartSingleTon instance = null;
private ShoppingCartSingleTon() {}
public static ShoppingCartSingleTon getInstance() {
if (instance == null) {
synchronized(ShoppingCartSingleTon.class) {
if (instance == null) {
instance = new ShoppingCartSingleTon();
}
}
}
return instance;
}
}
答案 0 :(得分:2)
购物车通常存储在用户的会话中。因此购物车应该是SessionScoped或ViewScoped。
您可以通过注射包含它(cdi,autowired,...)。 Spring和JavaEE都有很好的文档。
在多个用户可以访问后端的Web应用程序中,除了明确要求之外,任何内容都不应该是静态的。它可能会导致大规模同步和并发问题。