Mega Code Archive

 
Categories / Java Tutorial / Spring
 

Proxy Factory Add Advisor

File: Main.java import java.lang.reflect.Method; import org.aopalliance.aop.Advice; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.springframework.aop.Advisor; import org.springframework.aop.ClassFilter; import org.springframework.aop.Pointcut; import org.springframework.aop.framework.ProxyFactory; import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.aop.support.StaticMethodMatcherPointcut; public class Main {   public static void main(String[] args) {     BeanOne one = new BeanOne();     BeanTwo two = new BeanTwo();     BeanOne proxyOne;     BeanTwo proxyTwo;     Pointcut pc = new SimpleStaticPointcut();     Advice advice = new SimpleAdvice();     Advisor advisor = new DefaultPointcutAdvisor(pc, advice);     ProxyFactory pf = new ProxyFactory();     pf.addAdvisor(advisor);     pf.setTarget(one);     proxyOne = (BeanOne) pf.getProxy();     pf = new ProxyFactory();     pf.addAdvisor(advisor);     pf.setTarget(two);     proxyTwo = (BeanTwo) pf.getProxy();     proxyOne.foo();     proxyTwo.foo();     proxyOne.bar();     proxyTwo.bar();   } } class BeanTwo {   public void foo() {     System.out.println("BeanTwo.foo");   }   public void bar() {     System.out.println("BeanTwo.bar");   } } class BeanOne {   public void foo() {     System.out.println("BeanOne.foo");   }   public void bar() {     System.out.println("BeanOne.bar");   } } class SimpleAdvice implements MethodInterceptor {   public Object invoke(MethodInvocation invocation) throws Throwable {     System.out.println("SimpleAdvice.Invoking " + invocation.getMethod().getName());     Object retVal = invocation.proceed();     System.out.println("SimpleAdvice.Done");     return retVal;   } } class SimpleStaticPointcut extends StaticMethodMatcherPointcut {   public boolean matches(Method method, Class cls) {     return ("foo".equals(method.getName()));   }   public ClassFilter getClassFilter() {     return new ClassFilter() {       public boolean matches(Class cls) {         return (cls == BeanOne.class);       }     };   } }