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 :
