aspectJを使用してコンパイル済みのJavaクラスの動作をすばやく変更する方法

StackOverflow https://stackoverflow.com/questions/435348

  •  10-07-2019
  •  | 
  •  

質問

aspectJを使用して一時的にJavaアプリケーションに機能を追加する方法は?アスペクトを作成する、ajcでコンパイルする、アスペクトを適用するための追加のスイッチを備えたjavaコマンドを使用するなどのことですか?

役に立ちましたか?

解決

質問は、Aspectjが実行中に織り込んだコードを有効/無効にできるかと思います。

AspectJに組み込みのメカニズムがあるかどうかはわかりませんが、条件ステートメントでアスペクトのコードをラップできると確信しています。あとは、実行時にコードをオンまたはオフに切り替えるだけです

たとえば

// HelloWorld.java
public class HelloWorld {
    public static void say(String message) {
        System.out.println(message);
    }

    public static void sayToPerson(String message, String name) {
        System.out.println(name + ", " + message);
    }
}


// PoliteHelloWorld.java
public aspect PoliteHelloWorld {
    pointcut callSayMessage() : call(public static void HelloWorld.say*(..));
    before() : callSayMessage() {
        if( is_aspectj_turned_on_this_run() ) {
            System.out.println("Good day!");
        }
    }
    after() : callSayMessage() {
        if( is_aspectj_turned_on_this_run() ) {
            System.out.println("Thank you!");
        }
    }
}

" is_aspect_j_turned_on_this_run()"の実装方法あなた次第です(コマンドライン引数またはユーザー入力によって設定される可能性があります)

より良い方法があります。これは、実行時に無効にするアスペクトを処理するアスペクトを修正することです。この新しい追加のアスペクトは、" is_aspect_j_turned_on_this_run()"のチェックのみを担当します。このクリーナーメソッドの詳細については、こちら

をご覧ください。

これらの2つの方法よりも良い方法があるかどうかはわかりませんが(可能性が高い)、これにより少なくとも再コンパイルせずに実行時に何度でもオンとオフを切り替えることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top