🚀 Love Learning Java?
Subscribe to Ram N Java for the best coding tutorials and Spring Framework deep dives!
SUBSCRIBE NOWMastering Spring AOP ThrowsAdvice
In the world of Spring AOP (Aspect-Oriented Programming), handling errors gracefully is a superpower. Today, we are exploring ThrowsAdvice—a specific type of advice that triggers only when your code runs into an exception.
1. What is ThrowsAdvice?
Imagine you have a method that might fail (like a database connection). Instead of cluttering your main logic with try-catch blocks, ThrowsAdvice lets you write "error-handling logic" separately. It automatically catches exceptions thrown by your target methods and performs actions like logging or sending alerts.
2. How to Implement It
To use this, your class must implement the ThrowsAdvice interface. Interestingly, this interface doesn't have any methods you must override. Instead, Spring looks for a specifically named method called afterThrowing using reflection.
3. The Example Scenario
In our video example, we create a simple Validator class. If a user enters an invalid value, the class throws an exception. Our ThrowsAdvice then steps in to catch that specific error and print a helpful message, keeping our original code clean and focused.
4. Why Beginners Love It
It helps you follow the DRY (Don't Repeat Yourself) principle. You don't need to write the same error-handling code over and over again. You write it once in your Advice class, and Spring handles the rest!
Click here to watch on Youtube:
https://www.youtube.com/watch?v=xtm0kCyfbFo&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Spring AOP ThrowsAdvice Example | Spring Tutorial |
| Spring AOP ThrowsAdvice Example | Spring Tutorial |
| Spring AOP ThrowsAdvice Example | Spring Tutorial |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ram.core</groupId>
<artifactId>SpringDemo</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>SpringDemo</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>5.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring 5 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
EmployeeService.java
public class EmployeeService
{
public String getEmployeeName(int age)
{
System.out.println("Get Employee Information");
if(age != 28)
{
throw new ArithmeticException("Not a valid age");
}
return "Dave";
}
}
LoggingAdvice.java
import org.springframework.aop.ThrowsAdvice;
public class LoggingAdvice implements ThrowsAdvice
{
public void afterThrowing(Exception ex)
{
System.out.println(
"LoggingAdvice applied if exception occurs, exe message = "
+ ex.getMessage());
}
}
applicationContext.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<bean id="employeeService" class="com.ram.service.EmployeeService"></bean>
<bean id="loggingAdvice" class="com.ram.Advice.LoggingAdvice"></bean>
<bean id="employeeServiceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="employeeService"></property>
<property name="interceptorNames">
<list>
<value>loggingAdvice</value>
</list>
</property>
</bean>
</beans>
App.java
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ram.service.EmployeeService;
public class App
{
public static void main(String[] args)
{
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
System.out.println("---------------------------------------");
EmployeeService employeeService = context.getBean("employeeServiceProxy",
EmployeeService.class);
employeeService.getEmployeeName(50);
}
}
Output
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6ebc05a6: startup date [Mon Oct 15 09:34:53 IST 2018]; root of context hierarchy
Oct 15, 2018 9:34:53 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
Get Employee Information
LoggingAdvice applied if exception occurs, exe message = Not a valid age
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_ThrowsAdvice.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_ThrowsAdvice
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/e16b8c6ef73a72464fa5812e24080179c4adc913/Spring_2018/SpringDemo_ThrowsAdvice/?at=master
See also:
No comments:
Post a Comment