Spring AOP : Primeros pasos
La Programación Orientada a Aspectos (POA en español, AOP en inglés) es un concepto relativamente antiguo, y que ha tenido un éxito relativamente discreto.
Básicamente consiste en implementar por un lado un aspecto, que es un trozo de código común a ejecutar en varios métodos / clases. Por otro lado configuraremos los puntos de cruce, que son los lugares en los que el aspecto cruza con el código, es decir, cuando serán ejecutados. Para que funcione debemos interponer un Proxy entre la clase y el aspecto. De esta forma podemos acoplar / desacoplar aspectos comunes sin tocar código.
Existen varias implementaciones como AspectJ (AspectJ Programming Guide) o Spring AOP (Aspect Oriented Programming in Java with Spring Framework), y desgraciadamente no he encontrado mucha documentación fiable y moderna al respecto, además de que la terminología ha evolucionado estos últimos años.
En esta entrada construiremos un aspecto muy sencillo para aplicarlo a todos los objetos de negocio. El aspecto auditará el tiempo que tarda en ejecutarse cualquier método de la capa de negocio.
holamundoAOP
Partiremos del anterior proyecto, holamundoBO. Creamos un nuevo proyecto web dinámico, holamundoAOP, e introducimos las librerías de Spring, la configuración en el web.xml, los jsps, las clases que hemos definido y configuramos holamundoAOP-servlet.xml. Comprobamos que funciona todo correctamente.
Implementación del aspecto
Ahora podemos implementar un aspecto, en nuestro ejemplo utilizaremos una clase es.lycka.holamundoAOP.aspectos.AuditoriaInterceptor.
package es.lycka.holamundoAOP.aspectos;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class AuditoriaInterceptor implements MethodInterceptor {
public Object invoke(MethodInvocation method) throws Throwable {
long start = System.currentTimeMillis();
try {
Object result = method.proceed();
return result;
}finally {
long end = System.currentTimeMillis();
long timeMs = end – start;
System.out.println("Method: " + method.toString() + " took: " + timeMs +"ms.");
}
}
}
Configuración de AOP
Primeros declaramos el bean que identifica al aspecto:
<bean name="auditoriaInterceptor" class="es.lycka.holamundoAOP.aspectos.AuditoriaInterceptor" />
Y ahora declaramos el proxy y lo configuramos para interceptar las llamadas a los métodos de negocio, que serán atendidas por nuestro aspecto.
<bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="interceptorNames">
<value>auditoriaInterceptor</value>
</property>
<property name="beanNames">
<value>*BO</value>
</property>
</bean>
Reiniciamos, et voilá, ya lo tenemos. Volvemos a introducir el path "holamundoAOP/holamundo.lycka" y ahora el método es interceptado y el aspecto ejecutado. Simple y bello.
También te puede interesar:
- Web Services – Primeros pasos con Eclipse – Generar Cliente Servicio Web Ya hemos publicado nuestro servicio web en un servidor. Ahora queremos generar un cliente que consuma este servicio. Para ello utilizaremos las mismas herramientas descritas...
- Web Services – Primeros pasos con Eclipse – Generar Servicio Web Herramientas necesarias JDK. En esta demo utilizaré la 1.5 IDE Desarrollo. En esta demo utilizaré el Eclipse del MEC (Profiles > Public Profiles > Web...
- Web Services – Integrar los clientes en Spring Ya sabemos cómo publicar un servicio web y cómo construir un cliente que consuma dicho servicio partiendo del fichero descriptor del contrato. Ahora integraremos el...
- How-to Migrate from Spring Framework to Guice Iteration 0 – Stable Spring Application We start from a Spring application that is stable, all automated tests are running and has been tested by...
- Java Dependency Injection: Guice or Spring? Depending on your needs. Comparing both of them is like comparing a MP3 mobile player to an MP3 radio car. Spring provides you more and...































jjo dijo
8 de June del 2009 a las 12:20 pm
Me suena que este post lo he visto en algún que otro sitio.