基于自定义注解与 Spring AOP 的通用日志记录实现
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LoggingAspect {
@Around("@annotation(Loggable)")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
// 获取方法上的Loggable注解
Loggable loggable = methodSignature.getMethod().getAnnotation(Loggable.class);
// 获取注解中定义的日志级别
String level = loggable.level();
// 在执行方法之前记录日志
System.out.println("Logging at level " + level + " before method execution");
// 执行方法
Object result = joinPoint.proceed();
// 在执行方法之后记录日志
System.out.println("Logging at level " + level + " after method execution");
// 返回方法执行结果
return result;
}
}
这个示例代码定义了一个名为Loggable
的自定义注解和一个Spring AOP切面LoggingAspect
。切面中的logAround
方法使用@Around
注解来围绕标记有Loggable
注解的方法执行。它会在方法执行前后打印日志,其中日志级别是从Loggable
注解中获取的。这个例子展示了如何结合自定义注解和Spring AOP来实现方法执行的日志记录。
评论已关闭