弹簧 AOP 获取修改后的参数值



我有两个Spring方面(我们称它们为Aspect1和Aspect2(。Aspect1 在 Aspect2 之前执行,Aspect1 是日志记录方面,Aspect2身份验证方面,可能会使用ProceedingJoinPoint.proceed(modifiedArgs)更新一个方法参数的值(如果身份验证通过,基本上将构造一个CustomAuthentication对象(。出于日志记录目的,我需要在Aspect1中获取更新的参数(更新前的CustomAuthentication对象null,更新后它将包含我需要的一些实际数据(,我祈祷@AfterReturn建议可以完成这项工作,但它没有,那么有什么方法可以让它工作,还是完全不可能?

编辑1:我应该说Aspect1的顺序低于Aspect2

您的 Aspect2 应该在 Aspect1 之前工作,因此您需要定义您的方面的顺序。

来自春季文档:

当在不同方面定义的两条建议都需要在同一连接点运行时,除非您另行指定,否则执行顺序是未定义的。您可以通过指定优先级来控制执行顺序。这是通过实现方面类中的org.springframework.core.Ordered接口或使用@Order注释来以正常的 Spring 方式完成的。给定两个方面,从 Ordered.getValue(((或注释值(返回较低值的方面具有较高的优先级。

所以第一个选项是添加@Order注释:

@Aspect
@Order(0)
public class Aspect2 {
// your code
}
@Aspect
@Order(1)
public class Aspect1 {
// your code
}

第二个选项是添加接口:

@Aspect
public class Aspect2 implements Ordered 
{
public int getOrder() {
return 0;
}
...
}
@Aspect
public class Aspect1 implements Ordered 
{
public int getOrder() {
return 1;
}
...
}

最新更新