Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Handling Exceptions Using Spring's AOP

DZone's Guide to

Handling Exceptions Using Spring's AOP

This quick lesson in AOP will explore you can use Spring's implementation of aspect-oriented programming to handle exceptions.

· Java Zone ·
Free Resource

Build vs Buy a Data Quality Solution: Which is Best for You? Gain insights on a hybrid approach. Download white paper now!

In this post, I will show you how we can handle exceptions using Spring's aspect-oriented programming.

Prerequisites

To follow this article, you should have:

  • JDK 8+  
  • Gradle 2.3 + 
  • Your favorite IDE (I use IntelliJ IDEA)

Folder Structure

The folder structure should be as follows.

aopexceptionhandling:

├── build.gradle
└── src    
        ├── main    
        │   └── java
        │       └── net    
        │           └── asifhossain    
        │               └── aopexceptionhandling    
        │                   ├── aop    
        │                   │   └── ExceptionLoggerPointCut.java    
        │                   ├── AopExampleApp.java    
        │                   └── service    
        │                       └── ExceptionalService.java    
        └── test        
                └── java            
                         └── net                
                             └── asifhossain
                                 └── aopexceptionhandling
                                    └── AopExampleAppTest.java


Creating a Gradle Build File

Create a file named build.gradle in the application with the following content:

build.gradle:

group 'net.asifhossain'

buildscript {
    ext {
        springBootVersion = '1.5.9.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'net.asifhossain'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter-aop')
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}


Creating the Service

Now let's create a service method that will throw an exception.

ExceptionalService.java:

package net.asifhossain.aopexceptionhandling.service;

import org.springframework.stereotype.Service;

@Service
public class ExceptionalService {
    public void throwException() throws Exception {
        throw new Exception();
    }
}


Now let's create an aspect configuration file to log all the exceptions thrown from the service method.

ExceptionLoggerPointCut.java:

package net.asifhossain.aopexceptionhandling.aop;

import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.context.annotation.Configuration;

@Configuration
@Aspect
public class ExceptionLoggerPointCut {
    @AfterThrowing(pointcut = "execution(* net.asifhossain.aopexceptionhandling.*.*.*(..))", throwing = "ex")
    public void logError(Exception ex) {
        ex.printStackTrace();
    }
}


Making the Application Runnable

Now create the application class with all the components.

AopExampleApp.java:

package net.asifhossain.aopexceptionhandling;

import net.asifhossain.aopexceptionhandling.service.ExceptionalService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@SpringBootApplication
@EnableAspectJAutoProxy
public class AopExampleApp implements CommandLineRunner {

    @Autowired
    ExceptionalService service;

    @Override
    public void run(String... args) throws Exception {
        try {
            service.throwException();
        } catch (Exception ex) {
            
        }
    }

    public static void main(String[] args) {
        SpringApplication.run(AopExampleApp.class);
    }
}


Running the Application

To run the application, run the following command:

gradle bootRun 

You will see the thrown exception is logged on the console.

You can find all the codes in my GitHub repository.

That's all for today. Thanks for reading.

Build vs Buy a Data Quality Solution: Which is Best for You? Maintaining high quality data is essential for operational efficiency, meaningful analytics and good long-term customer relationships. But, when dealing with multiple sources of data, data quality becomes complex, so you need to know when you should build a custom data quality tools effort over canned solutions. Download our whitepaper for more insights into a hybrid approach.

Topics:
spring ,java ,aop ,exception handling ,tutorial

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}