Come modificare rapidamente il comportamento delle classi java compilate con aspectJ

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

  •  10-07-2019
  •  | 
  •  

Domanda

Come utilizzare aspectJ per aggiungere temporaneamente funzionalità ad alcune applicazioni Java? Qualcosa come creare l'aspetto, compilare con ajc, usare il comando java con qualche interruttore extra per applicare l'aspetto?

È stato utile?

Soluzione

La domanda, credo, è: puoi abilitare / disabilitare il codice creato da Aspectj durante il runtime.

Non so se in AspectJ sia presente un meccanismo incorporato, ma sono sicuro che puoi racchiudere il codice nell'aspetto con un'istruzione condizionale. Quindi tutto ciò che devi fare è runtime attivare o disattivare quel codice

ad esempio

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

Come desideri implementare " is_aspect_j_turned_on_this_run () " dipende da te (forse impostato dagli argomenti della riga di comando o dall'input dell'utente?)

Esiste un modo migliore, che è quello di correggere un aspetto che gestisce l'aspetto che si desidera disabilitare in fase di esecuzione. Questo nuovo aspetto aggiuntivo sarà responsabile solo della verifica del tuo " is_aspect_j_turned_on_this_run () " ;. Per i dettagli di questo metodo più pulito, guarda qui

Non so se esiste un modo migliore per farlo rispetto a questi due metodi (potrebbe benissimo essere) ma questo almeno ti consente di accenderlo e spegnerlo in fase di esecuzione tutte le volte che desideri senza ricompilare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top