Wednesday, January 03, 2007

Midiendo tiempos...sin Annotations

Que pasa si no dispongo de Java 5.0 y no puedo hacer uso de las annotations? Bien, aca esta la solucion al ejemplo anterior pero sin anotaciones.
package com.miempresa.training.aop.advices;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class MiAOPTimer implements MethodInterceptor {
private static Log logger = LogFactory.getLog(MiAOPTimer.class);

public Object invoke(MethodInvocation methodInvocation) throws Throwable {
long t1 = System.currentTimeMillis();
Object retorno = methodInvocation.proceed();
long t2 = System.currentTimeMillis();
logger.info("Método:"+methodInvocation.getMethod().getName()+" ("+(t2-t1)+" ms)");
return retorno;
}
}

El primer cambio notorio es que ahora nuestro advice debe implementar una interfase y sobrescribir el metodo invoke, el resto del codigo queda igual.
Finalmente, nuestro archivo de configuracion de Spring queda de la siguiente forma:
<beans>
<aop:config>
<aop:advisor pointcut="execution(* com.miempresa.training..*.*(..))"
advice-ref="MiAOPTimer"/>
</aop:config>
<bean id="usuarioService" class=com.miempresa.training.aop.UsuarioServiceImpl"/>
<bean id="MiAOPTimer" class="com.miempresa.training.aop.advices.MiAOPTimer"/>
</beans>

No comments: