1

Struts 1/Spring 2 アプリケーションがあります。私のActionクラスはすべてのセッションで共有されるシングルトンですか、それとも各ユーザー/セッションがクラスの新しいオブジェクトを取得するのでしょうか?Action

4

1 に答える 1

2

Struts Action クラスがシングルトンとして実装されているかどうかはわかりませんが、フレームワークはそのインスタンスを 1 つだけ使用し、すべての着信要求を処理するために 1 つのインスタンスのみを使用すると言えます。スレッド セーフではないアクション クラス。javadocから:

コントローラーは複数の同時要求に対して同じインスタンスを共有するため、アクションはスレッドセーフな方法でプログラムする必要があります。つまり、次の点を考慮して設計する必要があります。

  1. 特定のリクエストの状態に関連する情報を格納するために、インスタンス変数と静的変数を使用してはなりません。それらは、同じアクションのリクエスト間でグローバル リソースを共有するために使用される場合があります。
  2. 他のリソース (JavaBeans、セッション変数など) へのアクセスは、それらのリソースが保護を必要とする場合、同期する必要があります。(ただし、通常、リソース クラスは、必要に応じて独自の保護を提供するように設計する必要があります。

編集 :

これは、公式のApache Strutsページに次のように記載されています。

Struts 1 アクションはシングルトンであり、そのアクションのすべての要求を処理するクラスのインスタンスが 1 つしかないため、スレッドセーフである必要があります。シングルトン戦略は、Struts 1 アクションで実行できることを制限し、開発には特別な注意が必要です。アクション リソースは、スレッド セーフまたは同期化されている必要があります。

于 2013-05-12T16:13:25.130 に答える