| /*
 Pro Spring
 By Rob Harrop
 Jan Machacek
 ISBN: 1-59059-461-4
 Publisher: Apress
 */
 
 
 ///////////////////////////////////////////////////////////////////////////////////////
 public class SampleBean {
 
 public void foo(int x) {
 System.out.println("Invoked foo() with: "  +x);
 }
 
 public void bar() {
 System.out.println("Invoked bar()");
 }
 }
 
 
 ///////////////////////////////////////////////////////////////////////////////////////
 import org.aopalliance.intercept.MethodInterceptor;
 import org.aopalliance.intercept.MethodInvocation;
 
 public class SimpleAdvice implements MethodInterceptor {
 
 public Object invoke(MethodInvocation invocation) throws Throwable {
 System.out.println(">> Invoking " + invocation.getMethod().getName());
 Object retVal = invocation.proceed();
 System.out.println(">> Done");
 return retVal;
 }
 
 }
 
 
 ///////////////////////////////////////////////////////////////////////////////////////
 import java.lang.reflect.Method;
 
 import org.springframework.aop.ClassFilter;
 import org.springframework.aop.support.DynamicMethodMatcherPointcut;
 
 public class SimpleDynamicPointcut extends DynamicMethodMatcherPointcut {
 
 public boolean matches(Method method, Class cls) {
 System.out.println("Static check for " + method.getName());
 return ("foo".equals(method.getName()));
 }
 
 public boolean matches(Method method, Class cls, Object[] args) {
 System.out.println("Dynamic check for " + method.getName());
 
 int x = ((Integer) args[0]).intValue();
 
 return (x != 100);
 }
 
 public ClassFilter getClassFilter() {
 return new ClassFilter() {
 
 public boolean matches(Class cls) {
 return (cls == SampleBean.class);
 }
 };
 }
 }
 ///////////////////////////////////////////////////////////////////////////////////////
 import org.springframework.aop.Advisor;
 import org.springframework.aop.framework.ProxyFactory;
 import org.springframework.aop.support.DefaultPointcutAdvisor;
 
 public class DynamicPointcutExample {
 
 public static void main(String[] args) {
 SampleBean target = new SampleBean();
 
 // create advisor
 Advisor advisor = new DefaultPointcutAdvisor(
 new SimpleDynamicPointcut(), new SimpleAdvice());
 
 // create proxy
 ProxyFactory pf = new ProxyFactory();
 pf.setTarget(target);
 pf.addAdvisor(advisor);
 SampleBean proxy = (SampleBean)pf.getProxy();
 
 proxy.foo(1);
 proxy.foo(10);
 proxy.foo(100);
 
 proxy.bar();
 proxy.bar();
 proxy.bar();
 }
 }
 
 
 
 |