Interceptando métodos no Java

De Basef
Revisão de 14h41min de 28 de julho de 2017 por Admin (discussão | contribs) (Criou página com 'Para interceptar a chamada de um método, antes e depois, o seguinte esquema pode ser utilizado: 1) Criar uma classe interceptor: <source lang="java"> import javax.intercept...')

(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para: navegação, pesquisa

Para interceptar a chamada de um método, antes e depois, o seguinte esquema pode ser utilizado:

1) Criar uma classe interceptor:

import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;
 
public class ExecutionTimeInterceptor {
    @AroundInvoke
    public Object invoke(InvocationContext context) throws Exception {
        String methodName = context.getMethod().getName();
        String className = context.getTarget().getClass().getName();
        long timeBefore = System.currentTimeMillis();
 
        try {
            return context.proceed();
        } finally {
            long timeAfter = System.currentTimeMillis();
            long timeDiff = timeAfter - timeBefore;
            System.out.println("[ExecutionTimeInterceptor]: " + className + "::" + methodName + ": time " + timeDiff);
        }
    }
}

2) Utilizar a anotação no método desejado:

import javax.interceptor.Interceptors;
public myClass {
    @Interceptors(ExecutionTimeInterceptor.class)
    public void myMethod() {
 
    }
}