Spring AOP
June 22, 2020

M02 Q06 How to enable the detection of the @Aspect annotation?

What do you have to do to enable the detection of the @Aspect annotation?

To enable detection of @Aspect annotation you need to perform the following steps

Step 1. Add spring-aspects dependency. Without required dependencies on classpath, spring will fail with ClassNotFoundException/NoClassDefFoundError during the creation of Proxy objects for Spring Beans subject to aspects

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aspects</artifactId>
</dependency>

Step 2. Create @Configuration class and annotate it with @EnableAspectJAutoProxy annotation. Without @EnableAspectJAutoProxy Spring will not scan for @Aspect at all.

Step 3. Also, you need to have beans for @Aspect annotated classes. There are two ways to create those beans

  • Use @ComponentScan with @Component at class annotated with @Aspect
  • Use @Bean in Configuration class and create Spring Aspect Bean manually

What does @EnableAspectJAutoProxy do?

Annotation @EnableAspectJAutoProxy enables detection of @Aspect classes and creates a proxy object for beans subject to aspects. Internally process of creating proxies is done by AnnotationAwareAspectJAutoProxyCreator. By creating a proxy for each bean subject to aspects, Spring intercepts the calls and implements Before / After / AfterReturning / AfterThrowing / Around advices.

It is important to remember that @Aspect will not create Spring Beans on its own, you need to use Component Scanning or manually create beans for @Aspect classes.