【问题标题】:Spring AOP not working on all annotation methodsSpring AOP 不适用于所有注释方法
【发布时间】:2013-09-01 17:32:07
【问题描述】:

我在我的 spring mvc 项目中创建了一个自定义注解。 注解是用来做AOP的

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

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

问题是控制器上的注释工作(AOP 工作)很好。但是,从控制器中,我正在调用不同的可调用类和实用程序。当我在可调用类或 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"/>

【问题讨论】:

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


    【解决方案1】:

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

    1. 让您的实用程序类也清理 Spring bean
    2. 使用完整的 Aspectj 支持 - 这样即使您的实用程序类不是 Spring bean,它们也会与建议结合在一起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多