AuditoriaAspectXml.java
package pe.com.slcsccy.aop;
import pe.com.slcsccy.bean.Libro;
public class AuditoriaAspectXml {
public void auditar(Libro libroin, Object instancia) {
System.out.println("Aplicando Aspecto de auditoria auditar(..) @Before! con instancia:"+instancia.getClass().getCanonicalName());
}
}
ImpresorAspectXml.java
package pe.com.slcsccy.aop;
import pe.com.slcsccy.bean.Libro;
public class ImpresorAspectXml {
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());
}
}
La prueba de los aspectos se dispuso de tal forma que AuditoriaAspectXml.java se ejecute primero y antes del aspecto ImpresorAspectXml.java y que al final se ejecute la lógica de negocio.
Es decir el orden de ejecución debería ser el siguiente:
1. AuditoriaAspectXml.auditar();
2. ImpresorAspectXml.asignarAutor();
3. ImpresorService.imprimir()
La configuración mediante spring que logra lo anterior, es la siguiente:
<!-- Le indicamos a spring para que haga uso de las anotaciones @Autowired -->
<context:annotation-config/>
<!-- Le indicamos a spring que lea todas las clases bajo el paquete pe.com.slcsccy.service y sus
subpaquetes y clases, y si encuentra anotaciones estereotipadas(@Service,@Repository,@Controller)
a nivel de clase entonces cree beans del tipo singleton instanciandolas y disponiendolas al proyecto -->
<context:component-scan base-package="pe.com.slcsccy.service"/>
<!-- Creamos javabeans que nos servirá como aspecto -->
<bean id="impresorAspectXml" class="pe.com.slcsccy.aop.ImpresorAspectXml"/>
<bean id="auditoriaAspectXml" class="pe.com.slcsccy.aop.AuditoriaAspectXml"/>
<!-- Definición y configuración de los aspector propiamente dichos -->
<aop:config>
<!-- Configuración del primer aspecto de impresión y de orden=2, el atributo orden indica la secuencia
de ejecución de este aspecto cuando hay un advice que dispara varios aspectos, recuerda que un advice
es la clase en ejecución a la que le aplicamos los aspectos, en este proyecto es el
bean impresorService o instancias de la clase ImpresorServicePdf.java ó ImpresorServiceExcel.java-->
<aop:aspect ref="impresorAspectXml" order="2">
<!-- pointcut=literalmente punto de corte, indica a qué clase se le va a aplicar el aspecto, es
definido mediante expresiones regulares-->
<aop:pointcut id="pointcutImpresor"
expression="execution(public * pe.com.slcsccy.service..*(..)) and args(libroin) and target(instancia)"/>
<!-- aspecto, indica el nombre del método a ejecutar y el pointcut de referencia -->
<aop:before method="asignarAutor" pointcut-ref="pointcutImpresor" />
</aop:aspect>
<!-- Configuración del primer aspecto de impresión y de orden=1 -->
<aop:aspect ref="auditoriaAspectXml" order="1">
<aop:pointcut id="pointcutAuditoria"
expression="execution(public * pe.com.slcsccy.service..*(..)) and args(libroin) and target(instancia)" />
<aop:before method="auditar" pointcut-ref="pointcutAuditoria" />
</aop:aspect>
</aop:config>
No hay comentarios.:
Publicar un comentario
Es bueno comunicarnos, comenta!!.