
Spring AOP en acción
En este artículo, les mostraremos como funciona Spring AOP a través de un ejemplo básico, y para agilizar el proceso, solo nos hemos enfocado en las partes más importantes del proyecto.
El objetivo del este artículo es mostrar un breve tutorial de como utilizar Spring AOP creando un aspecto que intercepte un método para imprimir un mensaje antes y después de la ejecución de dicho método. Este ejemplo es el mismo utilizado en AspectJ en acción.
Teniendo como base un proyecto maven vacío, procedemos con las siguientes adiciones.
Dependencias Maven
Agregamos las siguientes dependencias en nuestro archivo pom.xml.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.7</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.7</version>
</dependency>
La clase
Para la implementación, creamos la siguiente clase llamada Console con un método que imprime un mensaje en la consola.
public class Console {
public void printMessage() {
System.out.println("message");
}
}
El aspecto
Creamos un aspecto de prueba usando el advice «around» que imprime un mensaje antes y después de la ejecución del método printMessage.
@Aspect
@Component
public class ConsoleAspect {
@Around("execution(* com.indev.demo.Console.printMessage())")
public void logAroundAllMethods(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("Log before...");
joinPoint.proceed();
System.out.println("After log...");
}
}
La prueba
Creamos la siguiente prueba para validar si los mensajes son pintados en la consola.
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = SpringTestConfig.class)
public class ConsoleTest {
@Autowired
private Console console;
@Test
public void testPrintMessage() {
console.printMessage();
}
}
Ejecutamos la prueba unitaria con mvn test y obtenemos un resultado similar al siguiente:
En la consola se observan 3 mensajes, dos correspondientes al aspecto y el del medio al método en sí.
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.indev.aop.ConsoleTest
Log before...
message
After log...
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 s - in com.indev.aop.ConsoleTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.031 s
[INFO] Finished at: 2022-09-10T02:45:55-05:00
[INFO] ------------------------------------------------------------------------
Como siempre puedes encontrar el código del ejemplo aquí.
Con esto nos despedimos y esperamos que hayamos podido contribuir en algo compartiendo nuestro conocimiento.