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