4

次の方法で Grails コントローラーをシングルトンにするとします。

static scope = "singleton"

... Grailsは、リクエスト固有paramsのコントローラーのアクションに変数をどのように公開しますか?params

paramsアクションメソッドに変数として渡された場合は理解できますが、ここでparamsは利用可能でスコープ内にあります(コントローラーのインスタンスが1つしかないにもかかわらず、同時リクエストの場合は異なります)。

これは内部でどのように実装されていますか?

4

1 に答える 1

8

各リクエストは独自のスレッドを取得するため、リクエスト、レスポンス、パラメーター、セッションなどは、コントローラーがシングルトンであるか、リクエストごとに新しく作成されたかに関係なく利用できます。これらの変数がクラスのフィールドである場合は異なりますが、そうではありません。

内部的には、これはコントローラ クラスに混在する AST 変換によって実装され、 (プロパティとして使用できる)org.codehaus.groovy.grails.plugins.web.api.ControllersApiなどのメソッドが追加されます。これらは、スレッド ローカル情報を取得するために呼び出します。getParams()paramsRequestContextHolder.currentRequestAttributes()

于 2013-08-28T15:47:47.697 に答える