AspectJ使用示例的基础上,LogAdvice 添加环绕通知方法
时间: 2024-09-14 12:14:33 浏览: 14
AspectJ是一种强大的面向切面编程(AOP)框架,它允许开发者编写独立于业务逻辑的模块,称为"切面"(Aspect),来处理横切关注点,如日志记录、事务管理等。在AspectJ中,`@Around`注解用于定义环绕通知,这是一种在目标方法执行前后都会执行的行为。
下面是一个简单的LogAdvice环绕通知方法的使用示例:
```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 logBeforeAfter(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis(); // 记录开始时间
try {
// 执行环绕通知前的操作,比如打印日志
System.out.println("Before method execution: " + joinPoint.getSignature().getName());
// 调用目标方法
return joinPoint.proceed(); // 使用joinPoint的proceed()方法继续执行原方法
} finally {
long end = System.currentTimeMillis();
// 执行环绕通知后的操作,如记录结束时间和日志
System.out.println("After method execution: " + joinPoint.getSignature().getName());
System.out.println("Method took " + (end - start) + "ms to execute.");
}
}
}
```
在这个例子中,当`com.example.service`包下的任何方法被调用时,都会先执行环绕通知里的`logBeforeAfter`方法,然后才是实际方法的执行。完成后,还会执行`finally`块中的通知,无论是否发生异常。