Cómo modificar rápidamente el comportamiento de las clases Java compiladas con aspectoJ

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

  •  10-07-2019
  •  | 
  •  

Pregunta

¿Cómo usar AspectJ para agregar funcionalidad temporalmente a alguna aplicación de Java? ¿Algo como crear el aspecto, compilar con ajc, usar el comando java con algún interruptor adicional para aplicar el aspecto?

¿Fue útil?

Solución

La pregunta, creo, es si puede habilitar / deshabilitar el código tejido por Aspectj durante el tiempo de ejecución.

No sé si hay un mecanismo incorporado en AspectJ, pero estoy seguro de que puede ajustar el Código en el Aspecto con una declaración condicional. Entonces, todo lo que necesita hacer es en tiempo de ejecución activar o desactivar ese código

por ejemplo

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

Cómo quiere implementar " is_aspect_j_turned_on_this_run () " depende de usted (¿tal vez establecido por argumentos de línea de comando o entrada del usuario?)

Hay una mejor manera, que es corregir un aspecto que maneja el aspecto que desea deshabilitar en tiempo de ejecución. Este nuevo aspecto adicional solo será responsable de verificar su " is_aspect_j_turned_on_this_run () " ;. Para obtener detalles sobre este método de limpieza, busque aquí

No sé si hay una mejor manera de hacer esto que estos dos métodos (muy bien podría ser), pero esto al menos le permite encenderlo y apagarlo en tiempo de ejecución tantas veces como lo desee sin volver a compilar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top