Spring 中的注解处理顺序(@Cacheable 和 @Timed)

Krz*_*soń 5 java spring spring-cache micrometer

我想@Cacheable@Timed(从千分尺)注释我的方法。但我希望@Timed仅在数据未计时的情况下应用。有没有办法做到这一点,以正确的顺序放置注释就足够了 - 那是什么顺序?

@Timed也在使用TimedAspect,不确定这是否相关。

现在我这样做:

@Cacheable
@Timed
public String getValue(long id) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我找不到任何@Cacheable可以讨论这个问题的文档。

Vic*_*tor 1

这很棘手,因为您正在处理 Spring 围绕您的业务 bean 创建的 AOP 代理,所以我不确定您是否可以依赖注释的顺序。

我认为你有几个选择:

  • 您可能希望重构代码以具有多种方法,一种方法用 标记,@Cacheable另一种方法用@Timed. 然而,我认为这对你不起作用,因为你需要多个 bean(对同一个 bean 的调用不会被 AOP 代理拦截)。因此,您需要两个 bean,一个充当外观,另一个执行@Timed您想要缓存和监视的实际昂贵的调用。
  • 另一种选择可能是在两个接口中扩展和@Timed,然后在您的 bean 中使用它们。我不完全确定这是否有效,因为这取决于注释的获取方式。沿着这条线的事情:指定Spring中代理创建的顺序@CacheableOrderable

希望能帮助到你。