aop中@After和@AfterReturning区别
时间: 2024-04-22 15:24:32 浏览: 12
在AOP(面向切面编程)中,@After和@AfterReturning是两个常用的注解,用于在目标方法执行后执行一些逻辑。它们的区别如下:
1. @After注解:
- @After注解标记的方法会在目标方法执行后无论是否发生异常都会被执行。
- 它类似于finally代码块,无论目标方法是否成功执行,都会执行@After注解标记的方法。
- 通常用于释放资源或进行清理工作。
2. @AfterReturning注解:
- @AfterReturning注解标记的方法只会在目标方法成功执行后被执行,不会在目标方法发生异常时执行。
- 它可以获取到目标方法的返回值作为参数。
- 通常用于处理目标方法的返回结果。
下面是一个示例:
```java
@Aspect
@Component
public class LoggingAspect {
@After(value = "execution(* com.example.MyService.doSomething(..))")
public void afterMethod(JoinPoint joinPoint) {
System.out.println("执行目标方法后执行@After注解标记的方法");
}
@AfterReturning(value = "execution(* com.example.MyService.doSomething(..))", returning = "result")
public void afterReturningMethod(JoinPoint joinPoint, Object result) {
System.out.println("目标方法返回值:" + result);
System.out.println("执行目标方法成功后执行@AfterReturning注解标记的方法");
}
}
```
在上述示例中,`@After`注解标记的`afterMethod`方法会在目标方法`doSomething`执行后无论是否发生异常都会被执行。而`@AfterReturning`注解标记的`afterReturningMethod`方法只会在目标方法执行成功并且返回结果时执行。