Java/Spring/DynamicMethodMatcherPointcut

Материал из Java эксперт
Перейти к: навигация, поиск

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>