Monday, 12 November 2018

Spring AOP Before Advice Example | Spring Tutorial

🔥 Unlock Your Coding Potential!

Join the Ram N Java family for the most practical Java and Spring tutorials on the web.

SUBSCRIBE FOR FREE

Understanding 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

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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

package com.ram.service;

public class EmployeeService
{
    public void displayEmployeeInfo()
    {
        System.out.println("Display Employee Information");
    }
}

LoggingAdvice.java

package com.ram.Advice;

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

<beans xmlns="http://www.springframework.org/schema/beans"
    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

package com.ram.core;

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

Oct 11, 2018 8:25:37 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
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:

  • All JavaEE Videos Playlist
  • All JavaEE Videos
  • All JAVA EE Links
  • Spring Tutorial
  • Servlets Tutorial
  • All Design Patterns Links
  • JDBC Tutorial
  • Java Collection Framework Tutorial
  • JAVA Tutorial
  • Kids Tutorial
  • Cooking Tutorial
  • No comments:

    Post a Comment

    Tutorials