spring环绕通知怎么用
时间: 2024-09-21 13:09:43 浏览: 31
Spring框架提供了一套强大的AOP(面向切面编程)机制,其中就包括了环绕通知(Around Advice)。环绕通知允许你在方法执行前、执行过程中或执行后插入自定义的逻辑,这在需要对业务流程做全局控制或者增强原有功能时非常有用。
在Spring中,我们可以使用`@Around`注解来创建环绕通知。首先,你需要创建一个切点(Pointcut)定义需要拦截的方法或类,然后编写一个处理通知逻辑的Advisor,通常是一个实现了`MethodBeforeAdvice`或`MethodInterceptor`接口的类。
以下是一个简单的示例:
```java
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
@Aspect
@Component
public class LoggingAspect {
@Around("execution(* com.example.service.*.*(..))") // 定义切点:拦截com.example.service包下的所有方法
public Object logAndExecute(ProceedingJoinPoint joinPoint) throws Throwable {
long startTime = System.currentTimeMillis(); // 记录开始时间
try {
System.out.println("Before method execution");
// 执行原方法
return joinPoint.proceed(); // call the original method
} finally {
long endTime = System.currentTimeMillis();
long duration = endTime - startTime; // 计算耗时
System.out.println("After method execution, took " + duration + "ms");
}
}
}
```
在这个例子中,`LoggingAspect`切面拦截了`com.example.service`包下所有方法的执行。`logAndExecute`方法会在每个方法调用前打印“Before method execution”,并在执行结束后计算并打印方法执行的时间。
阅读全文