Mega Code Archive

 
Categories / Java / Spring
 

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();     } }                     DynamicPointcutExample.zip( 1,481 k)