目录
一、基础知识:
二、测试记录接口的参数和结果
一、基础知识:
- @Before:用于执行目标方法之前的逻辑。
- @After:用于执行目标方法之后的逻辑。
- @AfterReturning:用于获取目标方法返回值后的逻辑。
- @AfterThrowing:用于处理目标方法抛出异常后的逻辑。
- @Around:用于在目标方法执行前后执行逻辑,并可控制是否执行目标方法。
- @Pointcut:用于定义切入点,指定哪些方法将被通知。
二、测试记录接口的参数和结果
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Loggable {String value() default "";}
@Aspect
@Component
@Slf4j
public class LoggingAspect {@Pointcut("@annotation(loggable)")public void loggableMethod(Loggable loggable) {}@Around("loggableMethod(loggable)")public Object logAround(ProceedingJoinPoint joinPoint, Loggable loggable) throws Throwable {// 获取方法名和参数String methodName = joinPoint.getSignature().getName();Object[] args = joinPoint.getArgs();log.info("Starting method: {}", methodName);log.info("Request parameters: {}", Arrays.toString(args));// 调用目标方法并获取返回值Object result = joinPoint.proceed();log.info("Finished method: {}", methodName);log.info("Response: {}", result);return result; // 返回结果}@Before("loggableMethod(loggable)")public void logBefore(JoinPoint joinPoint, Loggable loggable) {log.info("Starting method: {}", joinPoint.getSignature().getName());log.info("Request parameters: {}", Arrays.toString(joinPoint.getArgs()));}@After("loggableMethod(loggable)")public void logAfter(JoinPoint joinPoint, Loggable loggable) {log.info("Finished method: {}", joinPoint.getSignature().getName());}
}
结果: