aspect实现AOP示例
时间: 2023-07-07 11:40:33 浏览: 103
好的,以下是一个简单的示例:
```java
// 定义一个切面类
@Aspect
@Component
public class LoggingAspect {
// 定义一个切入点,对所有标注了@Log注解的方法进行拦截
@Pointcut("@annotation(com.example.Log)")
public void logPointCut() {}
// 在目标方法执行前执行日志记录
@Before("logPointCut()")
public void logBefore(JoinPoint joinPoint) {
String methodName = joinPoint.getSignature().getName();
String className = joinPoint.getTarget().getClass().getName();
System.out.println("Before " + className + "." + methodName + " method execute...");
}
// 在目标方法执行后执行日志记录
@AfterReturning("logPointCut()")
public void logAfterReturning(JoinPoint joinPoint) {
String methodName = joinPoint.getSignature().getName();
String className = joinPoint.getTarget().getClass().getName();
System.out.println("After " + className + "." + methodName + " method execute...");
}
// 在目标方法抛出异常时执行日志记录
@AfterThrowing(pointcut = "logPointCut()", throwing = "ex")
public void logAfterThrowing(JoinPoint joinPoint, Exception ex) {
String methodName = joinPoint.getSignature().getName();
String className = joinPoint.getTarget().getClass().getName();
System.out.println("Exception occurs in " + className + "." + methodName + " method: " + ex.getMessage());
}
}
// 在需要记录日志的方法上添加@Log注解
@Log
public void foo() {
// ...
}
```
以上代码使用了Spring AOP实现了一个简单的日志记录功能,通过在需要记录日志的方法上添加@Log注解,可以将该方法的前后执行以及异常信息记录下来。
阅读全文