如果@Cacheble Spring AOP应用于同一个函数,则不会拦截AspectJ方面

时间:2012-05-23 20:59:11

标签: spring aop aspectj ehcache spring-aop

我已经在@Controller类的函数上定义了两个方面。

一个是@Cacheble(Ehcache Spring annotation,它使用Spring AOP)。

另一个是围绕计算执行时间的建议。这是AspectJ Compile Time方面。

首次调用该方法时,正在执行这两个方面。但是,对于所有后续调用,只截获了@Cacheble方面。另一个建议(计算执行时间)没有被截获。为什么这不被截获? 我已经为这两个方面设置了@Order,但这没有帮助。

计算执行时间的第二个方面如下

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Order(value = 0)
public @interface MonitorPerformance {   
}

Dispathcher-servlet.xml有
<ehcache:annotation-driven create-missing-caches="true" cache-manager="ehCacheManager" order="1"/> 期待您的建议。

感谢。

2 个答案:

答案 0 :(得分:0)

对于要执行的方面,必须在从容器获取的实例上调用方法。是这样的吗?

答案 1 :(得分:0)

如果这是使用spring AOP编译时AspectJ然后它不会在缓存结果上执行编译方面,那么就是fyi。编译类的字节码直接在方法周围注入。如果这是代理并且在没有调用方法的情况下返回(这是可缓存的方法)那么,自然地,后一方面不会被调用。