Venkatesh
Venkatesh

Reputation: 21

Aspect not getting called in Spring MVC

I have our aspect, annotation & MVC controller written as follows:

Aspect

@Aspect
public class AuditAspect {

    @Around(value = "@annotation(com.test.Audit)")
    public Object audit(ProceedingJoinPoint pjp) {
       System.out.println("Inside the Audit aspect ...");
       Object result = null;
        try {
            result = pjp.proceed();
        } catch (Throwable t) {

        }
        return result;
    }
}

The annotation:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Audit
{
    AuditType auditType();
}

The controller:

@RestController
@RequestMapping("/patients")
public class PatientController {

    @Audit(auditType = AuditType.PATIENT_LIST)
    @RequestMapping(value="", method=RequestMethod.GET)
    public APIResponse getPatients(HttpServletRequest request, HttpServletResponse response, @RequestParam(required = false, value="audit") String sAudit) {
       System.out.println("Inside getPatients ...");
       return null;
    }
}

However, the aspect's audit method is not getting called whenever I make rest requests.

Looked around for some help. Found few posts where there were mentions of AspectJ not working with Spring MVC controllers. However, I tried this same example with a simple spring MVC application, and the aspect was getting called properly, even if controller methods were annotated. Not sure what is going wrong here. Any pointers/suggestions here would be very helpful.

The sample application I tried didn't have use of spring transaction manager, or integration with hibernate etc... Would that make any difference?

Also, given below is the context file entries:

<aop:aspectj-autoproxy />
<context:component-scan base-package="com.test">
  <context:include-filter type="aspectj" expression="com.test.AuditAspect" />
</context:component-scan>
<context:annotation-config />

Upvotes: 2

Views: 1038

Answers (1)

kriegaex
kriegaex

Reputation: 67287

In order to make Spring AOP work, both your aspect and the target object must be a Spring @Component.

Upvotes: 2

Related Questions