Pergunta

Como usar AspectJ para adicionar funcionalidade temporariamente para alguma aplicação java? Algo como criar o aspecto, compilando com AJC, usando o comando java com alguma chave extra para aplicar aspecto?

Foi útil?

Solução

A questão, eu acredito é que você pode ativar / desativar o código tecida por AspectJ durante a execução.

Eu não sei se há um construído em um mecanismo em AspectJ, mas estou certo de que você pode envolver o Código no aspecto com uma declaração condicional. Então tudo que você precisa fazer é a chave de tempo de execução que o código ligado ou desligado

Por exemplo

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

Como você deseja implementar o "is_aspect_j_turned_on_this_run()" é com você (talvez definir por argumentos de linha de comando ou a entrada do usuário?)

Há uma maneira melhor, que é para corrigir um aspecto que lida com o aspecto que você deseja desativar em tempo de execução. Este novo aspecto adicional só será responsável por verificar o seu "is_aspect_j_turned_on_this_run()". Para mais detalhes sobre este método mais limpo olhar aqui

Eu não sei se existe uma maneira melhor de fazer isso do que estes dois métodos (poderia muito bem ser), mas isso, pelo menos, permite ligar e desligar em tempo de execução, como muitas vezes quiser sem recompilar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top