2013년 7월 27일 토요일

[오라클자바개발자실무교육,오엔제이프로그래밍실무교육센터, spring framework3.X강좌]Spring AOP AspectJExpressionPointcut AspectJ 표현식

Spring AOP AspectJ__EXPRESSION__Pointcut AspectJ 포인트 표현식


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


  
Jdk 정규 표현식외 AspectJ 포인트컷 표현식 언어를 통해 포인트 컷을 선언할 수도 있다. JDK 정규식 보다 많이 사용되며 스프링은 AspectJ__EXPRESSION__Pointcut 클래스를 제공하며  aspectjrt.jar, aspectjweaver.jar 두 라이브러리 파일이 필요하다.


[First.java]
package onj.edu.aop5;
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;
           }
}
[AspectJPointcutExam.java] package onj.edu.aop5;
import org.springframework.aop.Advisor;
import org.springframework.aop.aspectj.AspectJ__EXPRESSION__Pointcut;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.support.DefaultPointcutAdvisor;
public class AspectJPointcutExam {
       public static void main(String[] args) {
             First target = new First();
            
             //Advisor
             AspectJ__EXPRESSION__Pointcut pc = new AspectJ__EXPRESSION__Pointcut();
             //인자, 반환 관계없이 hello 시작하는...
             pc.set__EXPRESSION__("execution(* 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 ...

댓글 없음:

댓글 쓰기