Interceptando métodos no Java
De Basef
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() { } }