6.1.1 개념들 by ys

Spring의 포인트 컷 모델은 advice 유형과 상관없이 pointcut 재사용을 가능하게한다. 동일한 포인트 컷을 사용하여 다른 advice 을 타겟팅 할 수 있습니다.

public interface Pointcut {

    ClassFilter getClassFilter();

    MethodMatcher getMethodMatcher();

}

- 위빙 (Weaving) : 보조업무가 프록시(Proxy)를 통해서 주 업무에 주입되는 것. 즉, 타깃 객체에 애스펙트를 적용해서 새로운 프록시 객체를 생성하는 절차.

- 조인포인트 (Joint Point) : 위빙하게 되는 함수. 그 지점.

- 포인트 컷 (PointCuts) : 객체의 특정 함수만 조인포인트 역할을 하도록 하는 것.

org.springframework.aop.Pointcut인터페이스는 특정 클래스 및 방법에 관한 advice를 타겟팅하는데 사용되는 핵 인터페이스이다. 전체 인터페이스는 다음과 같습니다.

Pointcut인터페이스를 두 부분으로 나누면 클래스 및 메소드 맞는 부분을 재사용 할 수 있고 세밀한 구성(composition)작업 (예 : 다른 메소드 매처(matcher)와 함께 "union"수행)을 허용합니다.

포인트컷을 주어진 대상 클래스의 세트로 제한할 때 ClassFilter 인터페이스를 사용한다. matches() 메서드가 항상 true를 반환하면 모든 클래스에 매칭될 것이다.

다음 목록은 ClassFilter인터페이스 정의를 보여줍니다 .

pointcut 인터페이스를 쉽게 재사용하고 구성하기 위해 두부분으로 나누었다는 말.

public interface ClassFilter {

    boolean matches(Class clazz);
}

true를 반환하는 메소드에만 매칭될 거라는 말. 그걸 걸러내는 역할.

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