我想用@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
并在两个接口中都实现Orderable
,然后在您的bean中使用它们。我不确定这是否会奏效,因为这取决于如何拾取注释。这句话:Specifying the order of proxy creation in Spring希望有帮助。