java web app中每个用户的Singleton对象

时间:2017-11-07 14:27:28

标签: java design-patterns singleton

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;
    }
}

1 个答案:

答案 0 :(得分:2)

购物车通常存储在用户的会话中。因此购物车应该是SessionScoped或ViewScoped。

您可以通过注射包含它(cdi,autowired,...)。 Spring和JavaEE都有很好的文档。

在多个用户可以访问后端的Web应用程序中,除了明确要求之外,任何内容都不应该是静态的。它可能会导致大规模同步和并发问题。