Pratyush
Pratyush

Reputation: 480

Spring AOP not working on all annotation methods

I have created a custom annotation in my spring mvc project. The annotation is used to do an AOP

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

Here the annotation that I have created is "Cached", any method with the annotation is cached in couch base with the response as its value and the method argument as its key.

The problem is the annotation works (AOP works) on the controllers well. However from controllers, I am making call to different callable classes and utils. When I add the annotation" @Cached" on the callable classes or the util funcations the AOP doesn't work.

In the XML file, the following is what I have declared.

<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"/>

Upvotes: 0

Views: 1588

Answers (1)

Biju Kunjummen
Biju Kunjummen

Reputation: 49915

With Spring AOP, your classes which match the pointcut (where you have placed your @Cached annotation in this specific case) should be Spring beans. So the best guess that I can make is that your utility classes are very likely not Spring beans and that is reason why they are not getting woven in. You have two options that I can think of:

  1. Make your utility classes also clean Spring beans
  2. Use full Aspectj support - this way even though your utility classes are not Spring beans they would be woven with the advice.

Upvotes: 2

Related Questions