Frage

Wie aspectj verwenden Funktionalität vorübergehend zu einem gewissen Java-Anwendung hinzufügen? So etwas wie der Aspekt zu schaffen, mit ajc Kompilieren, java-Befehl mit einigen zusätzlichen Schaltern Aspekt anwenden?

War es hilfreich?

Lösung

Die Frage, glaube ich, ist, können Sie aktivieren / deaktivieren Sie den Code spann von aspectj während der Laufzeit.

Ich weiß nicht, ob es ein Mechanismus in AspectJ gebaut ist, aber ich bin sicher, dass Sie den Code in dem Aspect mit einer bedingten Anweisung wickeln können. Dann alles, was Sie tun müssen, wechseln zur Laufzeit diesen Code ein oder aus

zum Beispiel

// 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!");
        }
    }
}

Wie wollen Sie die „is_aspect_j_turned_on_this_run()“ bis zu Ihnen (vielleicht durch Befehlszeilenargumente oder Benutzereingabe eingestellt?) Implementieren

Es gibt einen besseren Weg, der einen Aspekt ist richtig, dass das Seite Sie Griffe wollen zur Laufzeit deaktivieren. Dieser neue zusätzliche Aspekt wird nur dann verantwortlich sein, Ihre „is_aspect_j_turned_on_this_run()“ für die Überprüfung. sucht Details dieses sauberere Methode hier

Ich weiß nicht, ob es ein besserer Weg, dies als diese beiden Methoden (sehr gut sein könnte), aber dies zumindest tun kann Sie es aktivieren und zur Laufzeit so oft aus, wie Sie ohne neu zu kompilieren wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top