目錄
一、基礎知識:
二、測試記錄接口的參數和結果
一、基礎知識:
- @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());}
}
結果: