/* 
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(); 
    } 
} 
 
            
       
  |