2013년 9월 12일 목요일

스프링 AOP, 스프링3,2 AOP, 스프링3 AOP, Spring AOP 애노테이션을 활용한 포인트 컷

스프링 AOP, 스프링3,2 AOP, 스프링3 AOP, Spring AOP 애노테이션을 활용한 포인트 컷


Spring AOP 애노테이션을 활용한 포인트 :namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
 
Application이 애노테이션 기반이라면 커스텀 애노테이션을 사용해서 포인트컷을 지정하고 어드바이스를 특정 애노테이션이 적용된 모든 메소드 또는 타입에 적용하고 싶을 때가 있다. 스프링은 애노테이션을 사용해서 포인트컷을 정의할 수 있도록 해주는 AnnotationMatchingPointcut 클래스를 제공한다.
 
 
 
[AdviceRequired.java]
package onj.edu.aop6;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})  // 애노테이션을 타입레벨과 메소드레벨에서 적용할수있도록
public @interface AdviceRequired//interface 애노테이션으로 선언
}
 
 
[First.java]
package onj.edu.aop6;
 
public class First {
       @AdviceRequired  //어드바이스가 적용될
       public void hello() {
             System.out.println("hello1 ... ");
       }
      
       public void sayHello() {
             System.out.println("sayHello ... ");
       }     
}
 
 
 
 
[SimpleAdvice.java]
package onj.edu.aop6;
 
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;
           }
}
 
 
 
[AnnotationPointcutExam.java]
package onj.edu.aop6;
 
import org.springframework.aop.Advisor;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.aop.support.annotation.AnnotationMatchingPointcut;
 
public class AnnotationPointcutExam {
       public static void main(String[] args) {
             First target = new First();
            
             //Advisor, 메소드를 호출하면서 지정한 애노테이션이 적용된 모든 메소드에 어드바이스를 적용
             AnnotationMatchingPointcut pc = AnnotationMatchingPointcut.forMethodAnnotation(AdviceRequired.class);
             Advisor advisor = new DefaultPointcutAdvisor(pc, new SimpleAdvice());
            
             //Proxy
             ProxyFactory pf = new ProxyFactory();
             pf.setTarget(target);
             pf.addAdvisor(advisor);
             First f = (First)pf.getProxy();
            
             f.hello();
             f.sayHello();      
       }
}
 
 
[결과]
hello
hello1 ...
... SimpleAdvice 충고가 적용됨 ...
sayHello ...

댓글 없음:

댓글 쓰기