Spring AOP不适用于所有注释方法

时间:2013-09-01 17:32:07

标签: spring spring-mvc annotations aop spring-aop

我在spring mvc项目中创建了一个自定义注释。 注释用于执行AOP

@Around("execution(@Cached * * (..)) && @annotation(cache)")

这里我创建的注释是“缓存”,带有注释的任何方法都缓存在沙发基础中,响应为其值,方法参数为其键。

问题是控制器上的注释是否有效(AOP可以正常工作)。但是从控制器,我正在调用不同的可调用类和utils。当我在可调用类或util函数上添加注释“@Cached”时,AOP不起作用。

在XML文件中,以下是我声明的内容。

<aop:aspectj-autoproxy/>
<context:spring-configured/>
<context:component-scan base-package="com.abc.xyz">
    <!--<context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect"/>-->
</context:component-scan>


<bean id="universalController" class="com.abc.xyz.misc.UniversalController"/>
<bean class="com.abc.xyz.api.metric.SystemTiming"/>
<bean class="com.abc.xyz.api.annotations.URLCacheImpl"/>

1 个答案:

答案 0 :(得分:2)

使用Spring AOP,与切入点匹配的类(在此特定情况下放置@Cached注释的位置)应该是Spring bean。所以我可以做的最好的猜测是你的实用程序类很可能不是Spring bean,这就是为什么它们没有编织进来的原因。你有两个我能想到的选择:

  1. 让您的实用工具类也清理Spring beans
  2. 使用完整的Aspectj支持 - 这种方式即使您的实用程序类不是Spring bean,它们也会与建议一起编织。