6

Grails コントローラーのデフォルトのスコープは、prototypeつまり、リクエストごとに新しいコントローラーが作成されることです (Closure プロパティとしてのアクションに推奨)

さらに 2 つのスコープがコントローラーでサポートされています。

session- ユーザー セッションのスコープに対して 1 つのコントローラーが作成される

singleton- コントローラーのインスタンスは 1 つだけ存在します (メソッドとしてのアクションに推奨)

いつどのスコープを使用する必要がありますか? スコープの変更はいつ決定できますか? どのシナリオで?

4

1 に答える 1

10

Prototypeスコープは、sessionコントローラーフィールド内にリクエスト/セッション固有の状態を保存できることを意味します。ただし、これは推奨される方法ではなく、避ける必要があります。

一般的な慣行に従い、コントローラーの状態を回避する場合は、スコープを簡単に使用できますsingleton(これは Spring Web MVC コントローラーのデフォルトです)。

コントローラーに状態がある場合はprototypesessionスコープを使用する必要があります。

一般に、コントローラーに異なるスコープを混在させないことをお勧めします。prototypeスコープに慣れているため、誤ってシングルトン コントローラーにステートフル フィールドを追加してしまうと、非常につらい経験になる可能性があります。複数の同時リクエスト/セッションが同じフィールドにアクセスし、すべてが壊れるまで、このバグに気付かないでしょう。

于 2013-09-18T16:21:20.167 に答える