0

私は演劇を勉強してきました!フレームワークモジュールとそれを拡張しようとしている、いくつかの機能を追加します。エンハンサー(play.classloading.enhancers.Enhancer)から拡張されたクラスを見つけましたが、なぜPlay!なのか理解できませんでした。このモデルを採用しました。

なぜクラスをロードし、そのコミュニティコード拡張機能をこのようにするのですか?私は彼らの非常に簡単な説明を読んだのですが、なぜ彼らがそうするのか、そして私は祖母として扱われるように感じました:http ://www.playframework.org/documentation/1.2.5/main#Classenhancement

しかし、私が望んでいたようにそれは役に立ちませんでした。ユーザーが意図した機能で拡張するクラスをコーディングできないのはなぜですか?動的または特別な機能を指定してクラスをリロードする必要がある場合は、OKですが、私のプラグインコードは本質的に静的です。

なぜ彼らがそれをするのか、そして私がそれをする必要があるのか​​誰かが知っていますか?(答えを待っている間にそれをテストするつもりです!)

4

1 に答える 1

1

バイトコード拡張はツールプレイです!Java 言語を拡張し、アプリケーションのコードに「魔法の」ロジックを挿入するために使用されます。1 つの例は、次のコードを記述できるようにするコントローラーの render メソッドの拡張です。

public static void myAction() {
   String foo = "...";
   int bar = "...";
   render(foo, bar);
}

それ以外の

public static void myAction() {
   String foo = "...";
   int bar = "...";
   renderArgs.put("foo", foo);
   renderArgs.put("bar", bar);
   render();
}

起こったことはLocalVariableEnhancer、メソッドを強化し、myAction変数名から変数へのマップを生成することです。メソッド内renderでは、そのマップをチェックし、変数を自動的に renderArgs に入れます。

他にもget/setメソッド生成やJPAモデルの静的ファクトリメソッドなどのケースがあります。モジュールなどplay-morphiaもバイトコードエンハンサーを多用しています。目標は、純粋な Java 言語フレームワーク (継承、インターフェースなど) 内では提供できない究極のアプリケーション開発者エクスペリエンスを提供することです。

于 2012-12-14T01:55:19.377 に答える