Supongamos que queremos logear cada cosa que pasa por cada método de nuestros objetos, para hacer esto podemos utilizar aop.
Veamos un ejemplo:
@Aspect
@Configuration
@Order(0)
class LogingAspect {
private val logger = LogFactory.getLog(LoggingAspect::class.java)
@Pointcut("execution(public * com.paquete..*(..))")
fun allControllersMethods() {
}
@Around("allControllersMethods()")
fun profileAllMethods(pjp: ProceedingJoinPoint): Any {
val method: Method = (pjp.signature as MethodSignature).method
logger.info("Started ${method.name}")
try {
return if (pjp.args != null) {
pjp.proceed(pjp.args)
} else {
pjp.proceed()
}
} catch (ex: Exception) {
logger.error("Error in ${method.name}", ex)
throw ex
} finally {
logger.info( "Finished ${method.name}")
}
}
}
Y Listo!!