2

Struts アクションで Singleton クラスをインスタンス化すると、そのアクションを起動する他のリクエストに対して永続的になりますか?

つまり、もし私が Struts アクション コードを使用していて、次のように書いたとします。

Singleton object = Singleton.getInstance();

別のユーザーがそのオブジェクトを必要とする同じアクションまたは別のアクションを起動したときに、オブジェクトは存在しますか?

4

2 に答える 2

0

「単一」のインスタンス

適切に実装されSingletonた は、アプリケーションのコンテキスト内で一度構築され、作成されると JVM 内で再利用されます。シングルトン パターンウィキペディアのページには、(一部) と書かれています。

ソフトウェア エンジニアリングでは、シングルトン パターンは、クラスのインスタンス化を 1 つのオブジェクトに制限する設計パターンです。これは、システム全体でアクションを調整するために 1 つのオブジェクトだけが必要な場合に役立ちます。

tl;dr

はい。ASingletonはグローバル変数の形式であるため、すべてのユーザーが共有するインスタンスは 1 つだけです。

于 2015-07-07T00:58:12.567 に答える
0

私はあなたの疑問を理解します:

Struts2 アクションはThreadLocalであるため、すべてのアクションはすべてのリクエストで、そのオブジェクトのインスタンスを作成します。シングルトンは正しく動作しますか?

あなたのコードから、1.5*より前の Singletonを参照しているようです:

public class Singleton {
    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return INSTANCE;
    }
}

答えはイエスです:

private static final Singleton INSTANCE = new Singleton();

static「勝ち」ThreadLocal、それを一意にします(一度インスタンス化されてから共有されます)。


@Singleton*Java EE >= 6 を使用している場合、 EJB や@Singletonインジェクションなど、CDI、EJB3 などを使用して、これよりも優れたシングルトンを処理する多くの方法があることに注意してください。

于 2015-07-07T08:14:17.850 に答える