package com.pollex.pam.aop.logging.audit; import com.pollex.pam.aop.logging.audit.strategy.AuditLoggingFactory; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @Component @Aspect public class AuditLoggingAspect { private static final Logger log = LoggerFactory.getLogger(AuditLoggingAspect.class); @Autowired AuditLoggingFactory auditLoggingFactory; @Around("@annotation(com.pollex.pam.aop.logging.audit.AuditLoggingInject)") public Object around(ProceedingJoinPoint joinPoint) throws Throwable { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); AuditLoggingInject auditLoggingInject = method.getAnnotation(AuditLoggingInject.class); log.info("run audit logging strategy = {}", auditLoggingInject.type()); auditLoggingFactory.getAuditLoggingStrategy(auditLoggingInject.type()).auditLogging(joinPoint); return joinPoint.proceed(); } }