2013년 7월 27일 토요일

[오라클자바개발자실무교육,오엔제이프로그래밍실무교육센터,spring framework3.X강좌]Spring AOP JdkRegexpMethodPointcut 정규표현식 포인트컷

Spring AOP JdkRegexpMethodPointcut

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷  실무전문 강의)




앞 예제 처럼 메소드 이름을 정확히 알지 못하는 경우, 이름대신 패턴을 사용하여 포인트 컷을 생성할 수 있다. 이대 사용되는 포인트 컷이 JdkRegexpMethodPointcut 이다.
[First.java]
package onj.edu.aop4;
public class First {
       public void hello1() {
             System.out.println("hello1 ... ");
       }
       public void hello2() {
             System.out.println("hello2 ... ");
       }
       public void sayHello() {
             System.out.println("sayHello ... ");
       }     
}
[SimpleAdvice.java]
package onj.edu.aop4;
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(invocation.getMethod().getName());
                    
                     Object o = invocation.proceed();
                     System.out.println("... SimpleAdvice의 충고가 적용됨 ...");
                    
                     return o;
           }
}
[RegexpExam.java]
package onj.edu.aop4;
import org.springframework.aop.Advisor;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.aop.support.JdkRegexpMethodPointcut;
public class RegexpExam {
           public static void main(String[] args) {
                     First target = new First();
                    
                     //Advisor
                     JdkRegexpMethodPointcut pc = new JdkRegexpMethodPointcut();
                    
                     //스프링은 비교할 때 onj.edu.aop4.RegExam.hello1을 사용한다.
                     //.* 어떤패키지에있던지... hello를 담고 있으면  OK
                     pc.setPattern(".*hello.*");
                     Advisor advisor = new DefaultPointcutAdvisor(pc, new SimpleAdvice());
                    
                     //Proxy
                     ProxyFactory pf = new ProxyFactory();
                     pf.setTarget(target);
                     pf.addAdvisor(advisor);
                     First f = (First)pf.getProxy();
                    
                     f.hello1();
                     f.hello2();
                     f.sayHello();                  
           }
}
[결과]
hello1
hello1 ...
... SimpleAdvice 충고가 적용됨 ...
hello2
hello2 ...
... SimpleAdvice 충고가 적용됨 ...
sayHello ...

댓글 없음:

댓글 쓰기