0

Play フレームワーク (1.2.5) 内で PlayPlugin オブジェクトがどのように使用されているかを調べようとしています。

同じ PlayPlugin インスタンスは異なる Play スレッド間で共有されますか?

いくつかのソース ルックアップでは、そうだと思いますが、Play には多くの場所で何らかのメタ プログラミングがあり、私はこれらすべてに精通していないため、100% 確実ではありません。

PlayPlugin.beforeInvocation のコール スタック:

  • PlayPlugin.beforeInvocation
  • PluginCollection.beforeInvocation
    • 有効なプラグインのリストは PluginCollection 内のフィールドです)
  • Invocation.before
    • 静的フィールド Play.PluginCollection を使用
    • Thread.currentThread().setContextClassLoader(Play.classloader)たとえば、Play.PluginCollection に影響を与える可能性のあるものの 1 つです。

すべてのスレッドの単一インスタンス - 動作は、 Play Framework: Introduction to Writing Modulesの記事でも確認できます。

beforeActionInvocation(): このコードは、コントローラー呼び出しの前に実行されます。Play でも使用される検証に役立ちます。ここで、レンダー引数に追加のオブジェクトを入れることもできます。いくつかのプラグインは、スレッド ローカル内にいくつかの変数を設定して、スレッド セーフであることを確認します。

したがって、答えは、はい、インスタンスは共有されていると思いますが、それを確認したいと思います。

4

1 に答える 1

0

あなたが正しいです。PlayPlugin (もちろんサブクラス) の各インスタンスは、JVM 全体で共有されます。Play.plugin(class<T> clazz)メソッド呼び出しを介してそのインスタンスを取得します。

于 2013-02-15T08:11:24.343 に答える