Spring AOP Example
Here is the simple code for AOP, you may require these jar files in order to execute this application.
org.springframework.core-sources-3.0.1.RELEASE-A.jar
org.springframework.beans-3.0.1.RELEASE-A.jar
com.springsource.org.aopalliance-1.0.0.jar
This code is tested in NetBeans 8.0
Method Before Advice:(MethodBeforeAdvice)
Employee.java
//Employee Class package jclass; public class Employee { public void display() { System.out.println("this is the method that is in employee class"); } }
badvisor.java
package jclass; import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; public class badvisor implements MethodBeforeAdvice { @Override public void before(Method method, Object[] os, Object o) throws Throwable { System.out.println("Method name: "+method.getName()); System.out.println("Method Modifiers: "+method.getModifiers()); System.out.println("Lets check the Object Parameters"); } }
applicationContext.xml
<bean id="emp" class="jclass.Employee"></bean> <bean id="bv" class="jclass.badvisor"></bean> <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target" ref="emp"> </property> <property name="interceptorNames"> <list> <value>bv</value> </list> </property> </bean>
execresult.java
package jclass; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class execresult { public static void main(String args[]) { ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml"); Employee emp=(Employee)ac.getBean("proxy"); emp.display(); } }
After Returning Advice:(AfterReturningAdvice)
Pilot.java
package jclass; public class Pilot { public void display() { System.out.println("This message is from Pilot! Everyone Evacuate now!!!!"); } }
afteradvisor.java
package jclass; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; public class afteradvisor implements AfterReturningAdvice { @Override public void afterReturning(Object o, Method method, Object[] os, Object o1) throws Throwable { System.out.println("After Returning Advice: Everyone Evacuated"); } }
applicationContext.xml
<bean id="pilot" class="jclass.Pilot"></bean> <bean id="ara" class="jclass.afteradvisor"></bean> <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target" ref="pilot"/> <property name="interceptorNames"> <list> <value>ara</value> </list> </property> </bean>
execResult.java
package jclass; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class execResult { public static void main(String args[]) { ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml"); Pilot p=(Pilot)ac.getBean("proxy"); p.display(); } }
Around Advice:(MethodInterceptor)
Admin.java
package jclass; public class Admin { public void display() { System.out.println("Message from Admin: This weekend we have maintenace, kindly save your work"); } }
aroundadvisor.java
package jclass; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; public class aroundadvisor implements MethodInterceptor{ @Override public Object invoke(MethodInvocation mi) throws Throwable { Object obj; System.out.println("Method in Around Advisor Before Actual Admin Execution"); obj=mi.proceed(); System.out.println("Method in Around Advisor After Admin Execution"); return obj; } }
applicationContext.xml
<bean id="admin" class="jclass.Admin"/> <bean id="aa" class="jclass.aroundadvisor"/> <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target" ref="admin"/> <property name="interceptorNames"> <list> <value>aa</value> </list> </property> </bean>
execResult.java
package jclass; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class execResult { public static void main(String args[]) { ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml"); Admin a=(Admin)ac.getBean("proxy"); a.display(); } }
ThrowsAdvice:
package jclass; public class check { public void checkage(int n)throws Exception { if(n>18) { System.out.println("you are eligible to vote"); } else { System.out.println("you cant vote"); } } }
throwadvisor.java
package jclass; import org.springframework.aop.ThrowsAdvice; public class throwadvisor implements ThrowsAdvice { public void afterThrowing(Exception e) { System.out.println("exceptions"); } }
applicationContext.xml
<bean id="check" class="jclass.check"/> <bean id="ta" class="jclass.throwadvisor"/> <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target" ref="check"/> <property name="interceptorNames"> <list> <value>ta</value> </list> </property> </bean>
execResult.java
package jclass; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class execResult { public static void main(String args[]) { ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml"); check ck=(check)ac.getBean("proxy"); try { ck.checkage(22); } catch(Exception e) { e.printStackTrace(); } } }