6.1.1 개념들 by ys
Spring의 포인트 컷 모델은 advice 유형과 상관없이 pointcut 재사용을 가능하게한다. 동일한 포인트 컷을 사용하여 다른 advice 을 타겟팅 할 수 있습니다.
public interface Pointcut {
ClassFilter getClassFilter();
MethodMatcher getMethodMatcher();
}
org.springframework.aop.Pointcut
인터페이스는 특정 클래스 및 방법에 관한 advice를 타겟팅하는데 사용되는 핵 인터페이스이다. 전체 인터페이스는 다음과 같습니다.
Pointcut
인터페이스를 두 부분으로 나누면 클래스 및 메소드 맞는 부분을 재사용 할 수 있고 세밀한 구성(composition)작업 (예 : 다른 메소드 매처(matcher)와 함께 "union"수행)을 허용합니다.
포인트컷을 주어진 대상 클래스의 세트로 제한할 때 ClassFilter
인터페이스를 사용한다. matches()
메서드가 항상 true를 반환하면 모든 클래스에 매칭될 것이다.
다음 목록은 ClassFilter
인터페이스 정의를 보여줍니다 .
public interface ClassFilter {
boolean matches(Class clazz);
}
MethodMatcher
가 보통은 더 중요하다. 전체 인터페이스가 아래 나와 있다.
public interface MethodMatcher {
boolean matches(Method m, Class targetClass);
boolean isRuntime();
boolean matches(Method m, Class targetClass, Object[] args);
}
이 포잇트컷이 대상 클래스의 해당 메서드에 매칭될 것인지를 테스트할 때 matches(Method, Class)
메서드를 사용한다. 메서드 호출시마다 테스트가 필요한 경우를 피하려고 AOP 프락시를 생성할 때 이 평가를 수행할 수 있다. 2개의 인자를 가진 matches
메서드는 해당 메서드에 true
를 반환하고 MethodMatcher의isRuntime()
메서드가 true를 반환한다면 3개의 인자를 가진 matches 메서드는 메서드 호출시마다 호출될 것이다. 대상 어드바이스가 실행되기 전에 메서드 호출에 전달된 인자를 바로 보고 포인트컷을 활성화한다.
대부분의 MethodMatcher
는 정적이라서 MethodMatcher의 isRuntime()
메서드는 false
를 반환한다. 이 경우 3개의 인자를 가진 matches
메서드는 절대 호출되지 않는다.
TIP
가능하다면 포인트컷을 정적으로 만들어서 AOP 프레임워크가 AOP 프락시를 생성할 때 포인트컷 평가 결과를 캐시하도록 해라.
Last updated
Was this helpful?