A simple application to demonstrate how to implement After Returning Advice using Classic Spring Proxy-Based AOP in Java.
Scenario 1 ....
Step 1:- Subtraction.java Interface
Step 2:- SubtractionImpl.java Service Implementation Class
Step 3:- After Returning Advice Implementation class
Step 4 :- Spring Configuration file
Step 5:- Test class
Output of the program :
Scenario 2 .... Changes done only to step 2 and 4 in previous scenario
Step 2:- SubtractionImpl.java Service Implementation Class
Step 4:- Test class
Scenario 1 ....
Step 1:- Subtraction.java Interface
package com.hubberspot.classic.aop.afterreturningadvice; // Its a simple interface for the Subtraction service. // It contains one single method called as subtract(). // This method takes in two arguments both of the type // int. public interface Subtraction { public void subtract(int a , int b); }
Step 2:- SubtractionImpl.java Service Implementation Class
package com.hubberspot.classic.aop.afterreturningadvice; // It is the implementation class for the // Subtraction service. It just calculates and returns // subtraction of two numbers passed to it as arguments. public class SubtractionImpl implements Subtraction { @Override public int subtract(int a, int b) { if(a > b) { return (a-b); } else { return (b-a); } } }
Step 3:- After Returning Advice Implementation class
package com.hubberspot.classic.aop.afterreturningadvice; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; // This class is a simple After Returning Advice which implements // interface called as AfterReturningAdvice. This interface // has a method by name afterReturning(). This advice method is // called just before the subtract() method in the SubtractionImpl // class. It just outputs to the console a simple message. public class AfterReturningSubtractAdvice implements AfterReturningAdvice { // afterReturning() method has to be implemented in this advice class. // It takes in four parameters: // 1. Object which holds the value returned from the method invoked // 2. java.lang.reflect.Method object which refers to the method // to which the Advice is applied. // 3. A simple array of Objects that are the arguments which are // passed to the method which is been implemented in the service // class. // 4. The target object on which the method is been called. @Override public void afterReturning(Object returnValue, Method method, Object[] args, Object target) { System.out.println("Subtraction of two numbers done .... "); } }
Step 4 :- Spring Configuration file
|
Step 5:- Test class
package com.hubberspot.classic.aop.afterreturningadvice; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SubtractionTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("after_returning_advice.xml"); Subtraction subtract = (Subtraction)context.getBean("subtract"); int result = subtract.subtract(10, 6); System.out.println("Result = " + result); result = subtract.subtract(5, 10); System.out.println("Result = " + result); } }
Output of the program :
Scenario 2 .... Changes done only to step 2 and 4 in previous scenario
Step 2:- SubtractionImpl.java Service Implementation Class
package com.hubberspot.classic.aop.afterreturningadvice; public class SubtractionImpl implements Subtraction { @Override public void subtract(int a, int b) { if(a > b) { System.out.println((a-b)); throw new RuntimeException(); } else { System.out.println((b-a)); throw new RuntimeException(); } } }
Step 4:- Test class
package com.hubberspot.classic.aop.afterreturningadvice; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SubtractionTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("after_returning_advice.xml"); Subtraction subtract = (Subtraction)context.getBean("subtract"); subtract.subtract(10, 6); subtract.subtract(5, 10); } }Output of the program :