2013년 8월 11일 일요일

[오라클자바커뮤니티,스프링강좌,자바교육]AOP DefaultPointcutAdvisor를 이용한 예제

Spring Pointcut DefaultPointcutAdvisor를 이용한 예제

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

 
DefaultPointcutAdvisor는 단순히 Pointcut Advice를 결합시키는 클래스이다.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
 
1. Advice가 적용될 클래스 두 개를 만들자.
 
[HelloWorld.java]
package defaultPointcutAdvisor;
 
public class HelloWorld {
         String msg ;
         public String getMsg() {
                  return "HelloWorld!! " + msg;
         }
         public void setMsg(String msg) {
                  this.msg = msg;
         }       
         public String getName() {
                  return "HelloWorld.class";
         }
}
 
[Magician.java]
 
package defaultPointcutAdvisor;
 
public class Magician {
         public String jumoon;
         public void setJumoon(String jumoon) {
                  this.jumoon = jumoon;
         }
         public String getJumoon() {
                  return this.jumoon;
         }
}
 
 
2. 사후충고를 구현한 Advice 클래스
 
[AfterAdvice.java]
 
package defaultPointcutAdvisor;
 
import org.springframework.aop.AfterReturningAdvice;
 
import java.lang.reflect.Method;
 
public class AfterAdvice implements AfterReturningAdvice{
         //메소드가 리턴된후 실행되는 충고(Advice), 사후충고
    public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
        System.out.println(target.getClass() + "클래스 실행후: " + method);
    }
}
 
3. TEST Main 함수
 
package defaultPointcutAdvisor;
 
import org.springframework.aop.Advisor;
import org.springframework.aop.aspectj.AspectJExpressionPointcut;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.support.DefaultPointcutAdvisor;
 
public class MainTest {
  public static void main(String[] args) {
    HelloWorld target1 = new HelloWorld();
    Magician target2 = new Magician();
    //AspectJ의 포인트컷 정의를 이용
    AspectJExpressionPointcut pc = new AspectJExpressionPointcut();
    //defaultPointcutAdvisor 패키지아래 모든 클래스의 get으로 시작되는 메소드, 인자는 관계없다.
    pc.setExpression("execution(* defaultPointcutAdvisor..*.get*(..))");
 
    //advisor Pointcut Advice가 결합된 것


댓글 없음:

댓글 쓰기