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 ...
오라클자바커뮤니티 추천 개발자 강좌 - 개인80% 환급
댓글 없음:
댓글 쓰기