import java.lang.reflect.Method; 
 
import org.aopalliance.intercept.MethodInterceptor; 
import org.aopalliance.intercept.MethodInvocation; 
import org.springframework.aop.Advisor; 
import org.springframework.aop.ClassFilter; 
import org.springframework.aop.framework.ProxyFactory; 
import org.springframework.aop.support.DefaultPointcutAdvisor; 
import org.springframework.aop.support.DynamicMethodMatcherPointcut; 
 
public class Main { 
 
  public static void main(String[] args) { 
    MyClass target = new MyClass(); 
 
    Advisor advisor = new DefaultPointcutAdvisor(new SimpleDynamicPointcut(), new SimpleAdvice()); 
 
    ProxyFactory pf = new ProxyFactory(); 
    pf.setTarget(target); 
    pf.addAdvisor(advisor); 
    MyClass proxy = (MyClass) pf.getProxy(); 
 
    proxy.foo(1); 
    proxy.bar(); 
 
  } 
} 
 
class MyClass { 
 
  public void foo(int x) { 
    System.out.println("MyClass.foo() : " + x); 
  } 
 
  public void bar() { 
    System.out.println("MyClass.bar()"); 
  } 
} 
 
class SimpleAdvice implements MethodInterceptor { 
 
  public Object invoke(MethodInvocation invocation) throws Throwable { 
    System.out.println("SimpleAdivce.Invoking " + invocation.getMethod().getName()); 
    Object retVal = invocation.proceed(); 
    System.out.println("SimpleAdvice.Done"); 
    return retVal; 
  } 
} 
 
class SimpleDynamicPointcut extends DynamicMethodMatcherPointcut { 
 
  public boolean matches(Method method, Class cls) { 
    return ("foo".equals(method.getName())); 
  } 
 
  public boolean matches(Method method, Class cls, Object[] args) { 
    int x = (Integer) args[0]; 
    return (x != 100); 
  } 
 
  public ClassFilter getClassFilter() { 
    return new ClassFilter() { 
      public boolean matches(Class cls) { 
        return (cls == MyClass.class); 
      } 
    }; 
  } 
}
  |