我有一个新的方面,我想应用@Around
注释为@HystrixCommand
的服务方法。由于有注释,因此会自动应用HystrixCommandAspect
。
但是,HystrixCommandAspect
没有定义@Order
,我怀疑这意味着它默认为Integer.MAX_VALUE
(即应该最后执行)。我需要我的方面最后运行,因为HystrixCommandAspect
在不同的线程上执行service方法,而我的方面需要在该线程上运行(原因在这里可能并不重要,但涉及线程本地存储)。
看来,当@Order
中有平局时,顺序由Spring的组件扫描以某种方式确定。有没有一种方法可以手动指定Spring应用这些方面的顺序(假设我不能更改@Order
的HystrixCommandAspect
)?
最佳答案
您可以尝试使用@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。