¿Te gustaría aprender Spring Frameworks?
Tenemos los cursos que necesitas. ¡Haz clic aquí!
Spring AOP es uno de los componente clases de Spring Framework , pero no mucha gente usa los conceptos de programación aspectual , aunque cuando se conocen pueden llegar a ser muy útiles. Vamos a introducirlos en este artículo. Para ello necesitamos construir una aplicación con Spring Framework , en este caso nos apoyaremos en Spring Boot y seleccionaremos Spring MVC y Spring AOP. El conjunto de componentes a desarrollar es pequeño , necesitamos de entrada un controlador y una clase de servicio.
Esta clase de Servicio contiene dos métodos que ejecutan una funcionalidad X e Y. La programación Aspectual se basa en añadir funcionalidad adicional a los métodos ya construidos sin tener que modificar el código construido previamente. Para poder añadir esta funcionalidad , se necesitan crear proxies dinámicos de tal manera que la funcionalidad de estos se ejecute antes de que invoquemos los métodos reales.
Cuando esto sucede , es muy común que la nueva funcionalidad que deseemos aplicar a varios métodos sea una funcionalidad común y por lo tanto se pueda extraer a una nueva clase.
A esta nueva clase se la denomina Aspecto y añadirá dinámicamente la funcionalidad a nuestras clases. En nuestro caso la funcionalidad que deseamos añadir es que cada vez que invoquemos un método nos calcule el tiempo que tarda en ejecutarse y si tarda más de 2 segundos nos imprima un mensaje de log.
Spring AOP y JoinPoints
Uno de los conceptos fundamentales de la programación orientada a aspecto es el de JointPoint. Un JointPoint define los posibles puntos del programa en el que un Aspecto se puede aplicar.
Podemos aplicar los aspectos a los controladores , a los servicios , a unos métodos o a otros. Para complementar el concepto de JointPoint existe el concepto de PointCut o puntos de corte . Que define a que subconjunto de los JoinPoint vamos a aplicar un aspecto determinado.
Una vez explicados los conceptos a nivel abstracto vamos a implementarlo en un proyecto que dispone de las siguientes clases Java.
En este caso tenemos un controlador que invoca a los dos métodos de la clase servicio , estos simplemente imprimirán un mensaje por la consola. Por otro lado tenemos la clase de SpringBoot que se encarga de arrancar el proyecto y que tiene activadas las capacidades de programación aspectual a través de @EnableAspectJAutoProxy. Nos queda por ver como implementar el aspecto.
packagecom.tecgurus.net;
importorg.aspectj.lang.ProceedingJoinPoint;
importorg.aspectj.lang.annotation.Around;
importorg.aspectj.lang.annotation.Aspect;
importorg.springframework.stereotype.Component;
@Aspect@ComponentpublicclassAspecto
{@Around("execution(* com.tecgurus.servicios.*.*())")publicvoidtiempoPasado(ProceedingJoinPoint punto) throwsThrowable
{Long tiempo1 = System.currentTimeMillis();punto.proceed();Long tiempo2 = System.currentTimeMillis();Long total = tiempo2 - tiempo1;if(total > 2000)System.out.format("el metodo es : %s y el tiempo transcurrido %d\n", punto.getSignature().getName(), total);
}
}
Te esperamos en los siguientes artículos en donde hablaremos más acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.
¿Te gustaría aprender Spring Frameworks?
Tenemos los cursos que necesitas. ¡Haz clic aquí!