00:00

Spring Boot AOP (Aspect-Oriented Programming)

Spring Boot AOP is used to separate cross-cutting concerns such as logging, security, transactions, and monitoring from business logic. This makes the code cleaner, more modular, and easier to maintain.

What Is AOP?

Aspect-Oriented Programming (AOP) is a programming paradigm that allows you to add additional behavior to existing code without modifying the code itself.

Instead of writing the same logic (like logging) in multiple places, AOP lets you define it once and apply it automatically where needed.

Why Use AOP in Spring Boot?

  • Removes duplicate code
  • Improves readability and maintainability
  • Keeps business logic clean
  • Makes applications easier to extend

Common Use Cases of AOP

  • Logging method execution
  • Security checks and authorization
  • Transaction management
  • Performance monitoring
  • Exception handling

Core AOP Concepts

1. Aspect

An Aspect is a class that contains cross-cutting logic. It is marked using the @Aspect annotation.

2. Join Point

A Join Point is a specific point during program execution, such as a method call or method execution.

3. Pointcut

A Pointcut defines where an advice should be applied. It uses expressions to match methods.

4. Advice

Advice is the action taken at a particular join point.

Types of Advice:

  • @Before – runs before method execution
  • @After – runs after method execution
  • @AfterReturning – runs after successful execution
  • @AfterThrowing – runs if method throws an exception
  • @Around – runs before and after method execution

Enabling AOP in Spring Boot

Spring Boot enables AOP automatically when spring-boot-starter-aop is added.

      
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
  </dependency>
      
    

Creating an Aspect

      
  @Aspect
  @Component
  public class LoggingAspect {
  
      @Before("execution(* com.example.service.*.*(..))")
      public void logBeforeMethod() {
          System.out.println("Method execution started");
      }
  }
      
    

This advice runs before every method in the service package.

Using @Around Advice

@Around advice gives full control over method execution. It is commonly used for performance monitoring.

      
  @Around("execution(* com.example.service.*.*(..))")
  public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
      long start = System.currentTimeMillis();
      Object result = joinPoint.proceed();
      long end = System.currentTimeMillis();
      System.out.println("Execution time: " + (end - start) + " ms");
      return result;
  }
      
    

Pointcut Expressions Explained

  • execution(* com.example.*.*(..)) – all methods in package
  • execution(public * *(..)) – all public methods
  • @annotation(LogExecution) – methods with specific annotation

AOP with Custom Annotations

AOP can be combined with custom annotations for better control.

      
  @Target(ElementType.METHOD)
  @Retention(RetentionPolicy.RUNTIME)
  public @interface LogExecution {
  }
      
    
      
  @Around("@annotation(LogExecution)")
  public Object logCustomAnnotation(ProceedingJoinPoint joinPoint) throws Throwable {
      return joinPoint.proceed();
  }
      
    

Limitations of Spring AOP

  • Works only with Spring-managed beans
  • Does not support private methods
  • Self-invocation does not trigger aspects

Spring AOP vs AspectJ

  • Spring AOP is proxy-based and simpler
  • AspectJ provides full AOP support
  • Spring AOP is sufficient for most enterprise applications

Conclusion

Spring Boot AOP is a powerful tool for handling cross-cutting concerns in a clean and reusable way. By understanding aspects, pointcuts, and advice, developers can build scalable, maintainable, and professional-grade applications with minimal effort.