AOP (Aspect-Oriented Prorgamming) se utiliza principalmente para registro de eventos, seguimiento, optimización y monitoreo de aplicaciones. A continuación se muestra un ejemplo práctico implementado con Spring Boot.
Dependencia Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
Clase Aspecto para registro de peticiones HTTP
package com.ejemplo.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
@Aspect
@Component
public class RegistroAspecto {
private static final Logger log = LoggerFactory.getLogger(RegistroAspecto.class);
@Pointcut("execution(public * com.ejemplo.controlador.*.*(..))")
public void puntoCorte() {
// Punto de corte para todos los métodos públicos de los controladores
}
@Before("puntoCorte()")
public void antes(JoinPoint punto) {
log.info("======= ANTES de la ejecución del método =======");
ServletRequestAttributes atributos = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (atributos != null) {
HttpServletRequest peticion = atributos.getRequest();
log.info("URL solicitada: {}", peticion.getRequestURL());
log.info("Método HTTP: {}", peticion.getMethod());
log.info("Dirección IP: {}", peticion.getRemoteAddr());
}
log.info("Clase y método: {}.{}",
punto.getSignature().getDeclaringTypeName(),
punto.getSignature().getName());
log.info("Argumentos: {}", (Object[]) punto.getArgs());
log.info("======= FIN de la información previa =======");
}
@After("puntoCorte()")
public void despues() {
log.info("======= DESPUÉS de la ejecución del método =======");
}
@AfterReturning(returning = "resultado", pointcut = "puntoCorte()")
public void trasRetorno(Object resultado) {
log.info("Respuesta devuelta: {}", resultado);
}
}
Este aspecto intercepta todas las peticiones a los controladores del paquete com.ejemplo.controlador, registrando antes de la ejecución la URL, método HTTP, IP, clase/método y argumentos; después de la ejecución imprime un mensaje; y al final captura el valor de retorno.
La configuración básica para activar AOP en Spring Boot es automática al incluir la dependencia spring-boot-starter-aop. Solo es necesario anotar la clase con @Aspect y @Component.