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

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

现在,我像下面这样:

@Cacheable
@Timed
public String getValue(long id) {
    ...
}

我找不到有关@Cacheable的任何文档来讨论这一点。

最佳答案

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

我认为您有几种选择:

  • 您可能希望将代码重构为具有几种方法,一种方法标记为@Cacheable,另一种方法标记为@Timed。但是,我认为这对您不起作用,因为您需要多个bean(AOP代理不会拦截同一bean的调用)。因此,您将需要两个bean,一个充当facade,另一个充当您想要缓存和监视的实际@Timed昂贵的调用。
  • 另一个选择可能是同时扩展@Timed@Cacheable并在两个接口(interface)中实现Orderable,然后在您的bean中使用它们。我不确定这是否会奏效,因为这取决于如何选择批注。这句话:Specifying the order of proxy creation in Spring

  • 希望能帮助到你。

    10-05 18:06