Example On Spring AOP Before Advice, After Advice
|
Spring »
On Jul 25, 2012 | { 3 Comments }
|
Tweet
|
Hi friends…, will see one example on spring Before Advice, and After Advice.
Files Required
- MyAfterAdvice.java
- MyImplClass.java
- MyInterFace.java
- MyWelcomeAdvice.java
- OurLogic.java
- spconfig.xml
Directory Structure
![]() |
![]() |
MyAfterAdvice.java
package java4s;
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
public class MyAfterAdvice implements AfterReturningAdvice
{
public void afterReturning(Object returnValue, Method m,Object args[],Object target)throws Exception
{
System.out.println("Am from AfterAdvice to "+m.getName());
}
}
MyImplClass.java
package java4s;
public class MyImplClass implements MyInterFace
{
public void m1(){
System.out.println("This is from m1 method");
}
public void m2(){
System.out.println("This is from m2 method");
}
}
MyInterFace.java
package java4s;
public interface MyInterFace
{
void m1();
void m2();
}
MyWelcomeAdvice.java
package java4s;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class MyWelcomeAdvice implements MethodBeforeAdvice
{
public void before(Method m, Object args[], Object target)throws Exception
{
System.out.println("Am from BeforeAdvice to "+m.getName());
}
}
OurLogic.java
package java4s;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class OurLogic
{
public static void main(String args[])
{
Resource res = new ClassPathResource("spconfig.xml");
BeanFactory factory = new XmlBeanFactory(res);
MyInterFace inter =(MyInterFace)factory.getBean("id4");
inter.m1();
inter.m2();
}
}
spconfig.xml
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="id1" class="java4s.MyImplClass" /> <bean id="id2" class="java4s.MyWelcomeAdvice" /> <bean id="id3" class="java4s.MyAfterAdvice" /> <bean id="id4" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces" value="java4s.MyInterFace" /> <property name="interceptorNames" > <list> <value>id2</value> <value>id3</value> </list> </property> <property name="target"> <ref bean="id1"/> </property> </bean> </beans>
Output:
![]() |
![]() |
Explanation:
Actually in spring frame work, while creating a spring bean we need to follow POJI-POJO model. It means a spring bean is a combination of an interface and implementation class. In AOP always we need to create a spring bean in the form of interface and implementation class only, because the IOC container internally creates proxy class by implementing that interface with the help of ProxyFactoryBean.
In spring configuration file, we need to configure a predefined bean class called ProxyFactoryBean, this class is used to configure our bean class and its required advices as a group.
In the client application, we are passing id of ProxyFactoryBean (id4) to get the object, because we need proxyed object, but not target one hope you understand. In client application we cannot typecast the object into our bean class type, because internally the object is created for proxy class but not for our bean class right
so we need to typecast into interface type because the proxy class will also implements the same interface internally remember…!!
In OurLogic.java if we typecast into our class type, then it will generates ClassCastException exception.
Hope you are clear, if not refer previous concepts of AOP.
|





Hi,
Thanks for this post. But i have confusion in OurLogic.java,line no.15, it should be MyImplClass inter =(MyImplClass)factory.getBean(“id4″); rather we have used MyInterFace inter(MyInterFace)factory.getBean(“id4″); because MyInterFace is an interface and we can;t instansiate interface. Hope you got my problem.please help
@Abhishek
We are not creating any object to that interface, we just taking object into interface reference, like how we are using List and ArrayList
Hope you are clear.
Thanks a lot for providing such a wonderfull tutorial with easy to understand words….I would request you to write books. It will a block buster…Trust me.