ProxyFactory: Add Advisor : ProxyFactory « Spring « Java






ProxyFactory: 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);
      }
    };

  }
}




           
       








Spring-ProxyFactoryAddAdvisor.zip( 4,747 k)

Related examples in the same category

1.Invoke Method Through Proxy
2.StaticMethodMatcher and ProxyFactory