Veamos el siguiente requerimiento:
1. Agregar un proceso de auditoria que capture todas las ejecuciones del método imprimir
El requerimiento anterior lo podemos solucionar agregando un aspecto más y definir e implementar tanto la clase como el método de auditoria con la anotación @Order
Solución:
Declaración de componentes de spring:
<context:annotation-config/>
<context:component-scan base-package="pe.com.slcsccy.service"/>
<bean id="impresorAspect" class="pe.com.slcsccy.aop.ImpresorAspect"/>
<bean id="auditoriaAspect" class="pe.com.slcsccy.aop.AuditoriaAspect"/>
<aop:aspectj-autoproxy/>
Implementación de componentes java:
AuditoriaAspect.java:
package pe.com.slcsccy.aop;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import pe.com.slcsccy.bean.Libro;
@Order(1)
@Aspect
public class AuditoriaAspect {
@Order(1)
@Before("execution(public * pe.com.slcsccy.service..*(..)) && "+
"args(libroin) && target(instancia)")
public void auditar(Libro libroin, Object instancia) {
System.out.println("Aplicando Aspecto de auditoria auditar(..) @Before! con instancia:"+instancia.getClass().getCanonicalName());
}
}
ImpresorAspect.java
package pe.com.slcsccy.aop;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import pe.com.slcsccy.bean.Libro;
@Order(2)
@Aspect
public class ImpresorAspect {
@Order(2)
@Before("execution(public * pe.com.slcsccy.service..*(..)) && "+
"args(libroin) && target(instancia)")
public void asignarAutor(Libro libroin, Object instancia) {
if(libroin!=null)libroin.setAutor("Carlos Cacique");
System.out.println("Aplicando Aspecto asignarAutor(..) @Before! con instancia:"+instancia.getClass().getCanonicalName());
}
}
Algunas acotaciones: La anotación @Order debe ser colocada tanto a nivel de clase como a nivel de método, si lo colocamos solo a nivel de método, entonces el orden de ejecución va a estar indicado por el orden en la carga de los beans:
<bean id="impresorAspect" class="pe.com.slcsccy.aop.ImpresorAspect"/>
<bean id="auditoriaAspect" class="pe.com.slcsccy.aop.AuditoriaAspect"/>
No hay comentarios.:
Publicar un comentario
Es bueno comunicarnos, comenta!!.