2013년 7월 27일 토요일

[오라클자바개발자실무교육,오엔제이프로그래밍실무교육센터,Spring Framework3.2]Spring AOP Pointcut(제어흐름 포인트컷, ControlFlowPointcut)

스프링 AOP 포인트컷 고급활용

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


  
ControllFlowPointcut
특정 메소드 하위의 모든 메소드 호출 또는 특정 클래스 하위의 모든 메소드 호출에 사용한다
- First.java
package onj.edu.aop7;
public class First {
 public void hello() {
  // 특정 메소드인 myAdvice()에서 Call할 때 충고 적용함
  System.out.println("hello ... ");
 }
}
- SimpleBeforeAdvice.java
package onj.edu.aop7;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class SimpleBeforeAdvice implements MethodBeforeAdvice {
 public void before(Method method, Object args[], Object target) throws Throwable {
  System.out.println("Before Method ::" + method);
 }
}
- ControlFlowExam.java
public class CaontrolFlowExam {
 public static void main(String[] args) {
  ControlFlowExam c = new ControlFlowExam();
  c.go();
 }
 void go() {
  First target = new First();
  //ControlFlowExam.class의 myAdvice() 가 호출하는 모든 메소드에 충고적용
  Pointcut pc = new ControlFlowPointcut(ControlFlowExam.class, "myAdvice");
  Advisor advisor = new DefaultPointcutAdvisor(pc, new SimpleBeforeAdvice());
  //Proxy
  ProxyFactory pf = new ProxyFactory();
  pf.setTarget(target);
  pf.addAdvisors(advisor);
  First f = (First)pf.getProxy();
  //Normal Invoke
  f.hello();
  //ControlFlowExam.myAdvice()
  myAdvice(f);
 }
 void myAdvice(First f) {
  f.hello();
 }
}
[결과]
hello ...
Before Method ::public void onj.edu.aop7.First.hello()
hello ...

댓글 없음:

댓글 쓰기