import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LoggingAspect {
@Pointcut("execution(* com.example.service.YourServiceInterface.*(..))")
public void serviceMethods(){}
@Before("serviceMethods() && args(request)")
public void logBefore(JoinPoint joinPoint, Object request) {
String methodName = joinPoint.getSignature().getName();
System.out.println("Before: " + methodName + " with argument = " + request.toString());
}
@AfterReturning(pointcut = "serviceMethods()", returning = "response")
public void logAfter(Object response) {
System.out.println("After: " + response.toString());
}
}
这个示例代码展示了如何使用Spring AOP来记录方法调用前后的日志。LoggingAspect
类使用@Aspect
注解声明了一个切面,并定义了三个方法:logBefore
、logAfter
和serviceMethods
。serviceMethods
是一个切入点,指定了要拦截哪些方法;logBefore
是前置通知,在方法调用前执行,记录方法名和参数;logAfter
是后置返回通知,在方法返回后执行,记录返回结果。这个例子假设你有一个com.example.service.YourServiceInterface
接口,并且你的服务实现了这个接口。