🚀 Master Spring Framework!
Join the Ram N Java community for practical, step-by-step tutorials that make complex coding concepts simple.
SUBSCRIBE TO RAM N JAVAMastering Spring AOP: After Advice Explained
Aspect-Oriented Programming (AOP) is a powerful way to handle cross-cutting concerns like logging, security, or transaction management. In this guide, we dive deep into one of the most useful types of advice: After Advice.
What is After Advice?
In Spring AOP, After Advice is logic that executes immediately after a "join point" (usually a method execution) finishes. Think of it as a "finally" block in Java—it runs regardless of whether the method completed successfully or threw an exception.
Why Use After Advice?
It’s perfect for cleanup tasks! Whether you need to close a database connection, release a resource, or log that a method attempt has finished, After Advice keeps your business logic clean by separating these repetitive tasks into a single Aspect.
Practical Example
Using the @After annotation, you can target specific methods or entire packages. This tutorial shows you exactly how to set up your pointcuts so your advice triggers exactly when you need it to, making your application more modular and easier to maintain.
Key Takeaway: After Advice ensures your "teardown" logic always runs, providing a safety net for your application's state management.
Check Out More From Ram N Java
Keep your momentum going with these top-rated tutorials from my channel:
Click here to watch on Youtube:
https://www.youtube.com/watch?v=wW-NPP72o5w&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Spring AOP After Advice Example | Spring Tutorial |
| Spring AOP After Advice Example | Spring Tutorial |
| Spring AOP After Advice 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)
{
return "Peter";
}
return "Dave";
}
}
LoggingAdvice.java
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
public class LoggingAdvice implements AfterReturningAdvice
{
public void afterReturning(Object returnValue, Method method, Object[] args,
Object target) throws Throwable
{
System.out.println("Logging advice is applied after the method "
+ method.getName() + " in the target Object "
+ target.getClass().getName());
for (Object object : args)
{
System.out.println(object);
}
System.out.println("returnValue = " + returnValue);
}
}
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(28);
}
}
Output
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6ebc05a6: startup date [Fri Oct 12 08:06:21 IST 2018]; root of context hierarchy
Oct 12, 2018 8:06:22 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
Get Employee Information
Logging advice is applied after the method getEmployeeName in the target Object com.ram.service.EmployeeService
28
returnValue = Peter
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_after_advise.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_after_advise
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/e16b8c6ef73a72464fa5812e24080179c4adc913/Spring_2018/SpringDemo_after_advise/?at=master
See also:
No comments:
Post a Comment