Java/Spring/DynamicMethodMatcherPointcut
ClassFilter In DynamicMethodMatcherPointcut
<source lang="java">
File: Main.java 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); } }; }
}
</source>