2

コードのスニペットが、特定のパッケージの下にあるクラスのすべてのパブリック メソッドで実行されるようにする必要があります。

public String doStuff(String a, Integer b, Context c) {
   current.put(c); <--- code that need to be executed
   // business logic
   ...
}

コードのスニペットが各パブリック メソッドの最初の行として常に存在することを保証するための最良の方法は何でしょうか?

PMD などの静的コード分析ツールの使用を検討しました。また、コンパイル時の AOP が役立つと思います。他にアイデアはありますか?

そのためにアスペクトを使用できることを知っています。問題は、アプリケーションが Spring を使用しているが、「チェック」する必要があるクラスが Spring で管理されていないことです。また、サーバーの起動オプションを変更して、Spring アノテーション ベースのランタイム ウィービングを有効にすることは避けたいと考えています。

編集: コードを適用する必要があるクラスは、Akka Typed Actors です。

4

2 に答える 2

0

PMD は適切なオプションです。また、IDE と統合することもでき、すべての開発者に通知されます。

もう 1 つのオプションは、ビルド プロセスにいくつかのステップを追加することです。このステップでは、正規表現 (または Java パーサー - PMD にもあります) を使用してソース コードを変更するか、ASM や JavaAssist などの後処理を行うライブラリを使用してバイト コード生成を追加します。コンパイル後のコード。

AspectJ を使用できる場合は、それを使用して、コードをチェック/追加するためにコンパイルされた後、クラス ファイルを後処理することもできます。

いくつかの Factory 実装を使用してこのクラスの作成を制御できる場合は、作成されたインスタンスの周りに動的プロキシを作成できます。

于 2011-04-22T09:35:32.950 に答える
0

「Context」オブジェクトを次のレイヤーに渡す必要があり、そのために ThreadLocal を使用する予定です。スニペットは、現在のコンテキストをスレッドローカルに配置する必要があります。

Spring を使用している場合、コンテキストをスレッドスコープの Bean にすることを検討しましたか? これが HTTP リクエストによるものである場合は、Bean でscope="request"を使用でき、Spring が管理します (リクエスト スコープの Bean をシングルトンに渡すことを含む)。

より一般的なスレッド スコープを簡単に作成できます。

于 2011-03-15T21:18:45.070 に答える