스프링 AOP 포인트컷 고급활용
오라클자바커뮤니티에서 설립한
오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝,
힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
ControllFlowPointcut
특정 메소드 하위의 모든 메소드 호출 또는 특정 클래스 하위의 모든 메소드 호출에 사용한다
특정 메소드 하위의 모든 메소드 호출 또는 특정 클래스 하위의 모든 메소드 호출에 사용한다
- First.java
package onj.edu.aop7;
public class First {
public void hello() {
// 특정 메소드인 myAdvice()에서 Call할 때 충고 적용함
System.out.println("hello ... ");
}
}
// 특정 메소드인 myAdvice()에서 Call할 때 충고 적용함
System.out.println("hello ... ");
}
}
- SimpleBeforeAdvice.java
package onj.edu.aop7;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
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);
}
}
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());
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);
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();
}
}
//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 ...
Before Method ::public void onj.edu.aop7.First.hello()
hello ...
댓글 없음:
댓글 쓰기