🔥 Unlock Your Coding Potential!
Join the Ram N Java family for the most practical Java and Spring tutorials on the web.
SUBSCRIBE FOR FREEUnderstanding Spring AOP Before Advice
If you're looking to write cleaner, more professional code in the Spring Framework, understanding AOP (Aspect-Oriented Programming) is a must. Today, we're zooming in on Before Advice.
1. What is Before Advice?
As the name suggests, Before Advice is logic that executes before your actual method runs. It’s perfect for tasks that need to happen first, like security checks, logging the start of a process, or validating user input before any processing begins.
2. Implementing MethodBeforeAdvice
In Spring AOP, to create Before Advice, your class implements the MethodBeforeAdvice interface. This interface provides a single method called before(). Inside this method, you define exactly what should happen right before your target method is called.
3. Why Use It?
The beauty of AOP is "Separation of Concerns." Instead of putting logging code inside every single business method, you write it once in your Advice class. This keeps your business logic clean and easy to maintain. It’s a game-changer for large projects!
4. Simple Example
Imagine a bank transfer method. Before the money is moved, you want to log: "Transfer attempt started...". By using Before Advice, Spring automatically handles this logging for you every time that method is triggered, without you having to manually add a print statement inside the transfer logic.
Click here to watch on Youtube:
https://www.youtube.com/watch?v=mHdBhjagMEc&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Spring AOP Before Advice Example | Spring Tutorial |
| Spring AOP Before Advice Example | Spring Tutorial |
| Spring AOP Before Advice 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 void displayEmployeeInfo()
{
System.out.println("Display Employee Information");
}
}
LoggingAdvice.java
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class LoggingAdvice implements MethodBeforeAdvice
{
public void before(Method method, Object[] args, Object target)
throws Throwable
{
System.out.println("Logging advice is applied before the method "
+ method.getName() + " in the target Object "
+ target.getClass().getName());
}
}
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.displayEmployeeInfo();
}
}
Output
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6ebc05a6: startup date [Thu Oct 11 08:25:37 IST 2018]; root of context hierarchy
Oct 11, 2018 8:25:38 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
Logging advice is applied before the method displayEmployeeInfo in the target Object com.ram.service.EmployeeService
Display Employee Information
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_before_Advise.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_before_Advise
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/e16b8c6ef73a72464fa5812e24080179c4adc913/Spring_2018/SpringDemo_before_Advise/?at=master
See also:
No comments:
Post a Comment