在Spring中订购第三方Aspect

时间:2017-09-27 15:01:18

标签: java spring spring-boot hystrix

我有一个新的Aspect,我想应用@Around一个用@HystrixCommand注释的服务方法。由于注释,HystrixCommandAspect会自动应用。

但是,HystrixCommandAspect没有定义@Order,我怀疑它意味着它默认为Integer.MAX_VALUE(即它应该最后执行)。我需要我的方面最后运行,因为HystrixCommandAspect在不同的线程上执行服务方法,我的方面需要在该线程上运行(原因可能在这里不重要,但它涉及线程本地存储)。

似乎当@Order中存在平局时,顺序以某种方式由Spring的组件扫描确定。有没有办法手动指定Spring应该应用这些方面的顺序(假设我无法更改@Order的{​​{1}})?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用@DeclarePrecedence,例如:

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclarePrecedence;

@Aspect
@DeclarePrecedence("*, com.example.HystrixCommandAspect, com.example.YourCustomAspect")
public class AspectOrder {
}

可能需要你切换到AspectJ。