gpt4 book ai didi

java - 如何更改由相同注释(例如 AspectJ 中的 @Around)注释的两个或多个建议的执行顺序?

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:52 25 4
gpt4 key购买 nike

这是我的代码:

@Pointcut("execution(* *(..))")
public void cutPointToken() {}

@Pointcut("execution(* *(..))")
public void cutPointEmptyParam() {}

@Around("cutPointToken()")
public Object authenticateToken(ProceedingJoinPoint joinPoint) throws Throwable {
LOGGER.info("authenticate -- start --");
...
Object o = joinPoint.proceed();
LOGGER.info("authenticate -- end --");
return o;
}

@Around("cutPointEmptyParam()")
public Object checkParameter(ProceedingJoinPoint joinPoint) throws Throwable {
LOGGER.info("check param -- start --");
...
Object o = joinPoint.proceed();
LOGGER.info("check param -- end --");
return o;
}

我得到了:

authenticate -- start --
check param -- start --
...
check param -- end --
authenticate -- end --

预期:

check param -- start --
authenticate -- start --
...
authenticate -- end --
check param -- end --

如何更改这两个方法的执行顺序?

尝试了 @Order 注释、checkParameter 方法上的 @Order(1) 以及另一个方法上的 @Order(2),但不起作用。

最佳答案

使用@Order注释的想法是正确的,但是,将其放在类级别上,如文档7.2.4.7 Advice ordering州。

This is done in the normal Spring way by either implementing the org.springframework.core. Ordered interface in the aspect class or annotating it with the Order annotation.

@Aspect注释的方法上的放置将不起作用,因为它没有注册为bean。在 1.9.2. @Autowired 中查找 @Order 注解部分。

The @Order annotation may be declared at target class level but also on @Bean methods...

@Aspect
@Order(1)
public class CheckParameterAspect {

@Around("cutPointEmptyParam()")
public Object checkParameter(ProceedingJoinPoint joinPoint) throws Throwable {
//...
}
}

@Aspect
@Order(2)
public class AuthenticateTokenAspect {

@Around("cutPointToken()")
public Object authenticateToken(ProceedingJoinPoint joinPoint) throws Throwable {
//...
}
}

编辑:从 0 开始排序似乎是可能的。

关于java - 如何更改由相同注释(例如 AspectJ 中的 @Around)注释的两个或多个建议的执行顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52111552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com