🚀 Want to Master Spring & Java?
Don't miss out on more tutorials! Click below to join our community and level up your coding skills today!
SUBSCRIBE TO RAM N JAVAUnderstanding Spring AOP Around Advice
In this tutorial, we dive into Spring AOP (Aspect-Oriented Programming). Specifically, we explore how to use Around Advice to intercept all methods within a class. This is incredibly useful when you want to execute logic both before and after a method runs, such as for logging or performance monitoring.
1. What is Around Advice?
Around Advice is the most powerful type of advice in Spring AOP. It surrounds a method call. You have control over when the actual method executes and can even decide to skip it or return a different value.
2. Implementing MethodInterceptor
To create Around Advice, we implement the MethodInterceptor interface. In the example shown in the video, we provide an implementation for the invoke method, which contains the logic to be applied across our service methods.
3. Configuring the Proxy
To apply this advice to all methods of a class like EmployeeService, we use a ProxyFactoryBean in the Spring configuration. We set the "target" to our service bean and add our advice bean to the "interceptorNames" list.
4. Why Apply to All Methods?
Applying advice to every method in a class ensures consistent behavior. For instance, you can automatically log the start and end of every action in your EmployeeService without writing repetitive code in every single method.
Check Out More From My Channel:
Click here to watch on Youtube:
https://www.youtube.com/watch?v=fkRJL5sNyMk&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Spring AOP AroundAdvice[applied to all methods of the class] Example | Spring Tutorial |
| Spring AOP AroundAdvice[applied to all methods of the class] Example | Spring Tutorial |
| Spring AOP AroundAdvice[applied to all methods of the class] Example | Spring Tutorial |
| Spring AOP AroundAdvice[applied to all methods of the class] Example | Spring Tutorial |
pom.xml
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()
{
System.out.println("Get Employee Name");
return "Dave";
}
public int getEmployeeAge()
{
System.out.println("Get Employee Age");
return 28;
}
public String getEmployeeAddress()
{
System.out.println("Get Employee Address");
return "A111, East Street";
}
}
AroundAdvice.java
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class AroundAdvice implements MethodInterceptor
{
public Object invoke(MethodInvocation mi) throws Throwable
{
Object obj;
System.out.println("AroundAdvice applied before actual method = "
+ mi.getMethod().getName());
obj = mi.proceed();
System.out.println("obj = " + obj);
System.out.println("AroundAdvice applied after actual method = "
+ mi.getMethod().getName());
return obj;
}
}
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="aroundAdvice" class="com.ram.Advice.AroundAdvice"></bean>
<bean id="employeeServiceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="employeeService"></property>
<property name="interceptorNames">
<list>
<value>aroundAdvice</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();
System.out.println("----------------------------------------");
employeeService.getEmployeeAge();
System.out.println("----------------------------------------");
employeeService.getEmployeeAddress();
}
}
Output
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Tue Oct 16 09:16:55 IST 2018]; root of context hierarchy
Oct 16, 2018 9:16:55 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
AroundAdvice applied before actual method = getEmployeeName
Get Employee Name
obj = Dave
AroundAdvice applied after actual method = getEmployeeName
----------------------------------------
AroundAdvice applied before actual method = getEmployeeAge
Get Employee Age
obj = 28
AroundAdvice applied after actual method = getEmployeeAge
----------------------------------------
AroundAdvice applied before actual method = getEmployeeAddress
Get Employee Address
obj = A111, East Street
AroundAdvice applied after actual method = getEmployeeAddress
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_around_advise_all_methods.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_around_advise_all_methods
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/e16b8c6ef73a72464fa5812e24080179c4adc913/Spring_2018/SpringDemo_around_advise_all_methods/?at=master
See also:
No comments:
Post a Comment