레퍼런스 Spring AOP - Pointcut

황제낙엽 2007.10.02 06:50 조회 수 : 1781 추천:123

 

Pointcut (교차점)

- AOP에서 Advice(충고)가 적용될 대상 객체의 적용 지점(포인트)을 정의

- 재사용이 가능하여 동일한 pointcut을 사용하여 다른 advice(총고)를 설정할 수 있다.

- 다음의 Pointcut interface를 구현해서 advice를 적용할 수 있다.

- 클래스와 매치되는 부분과 메소드의 matcher를 이용하여 union(병합) 수행을 허용
 

public interface Pointcut {

    ClassFilter getClassFilter();

    MethodMatcher getMethodMatcher();

}



ClassFilter 인터페이스

- 주어진 target 클래스들의 셋트에 pointcut(교차점)을 제한하기 위함

- matches() 메소드가 항상 true를 반환한다면 모든 target 클래스들을 매치
 

public interface ClassFilter {

    boolean matches(Class clazz);
}



MethodMatcher 인터페이스

- pointcut(교차점)이 target 클래스상에서 주어진 메소드를 매치하여 포함할 것인지 검사

- 모든 메소드 호출에 대하여 검사의 요구를 피하기 위해서 AOP 프록시를 생성할 때 이 검사를 수행

- 대부분의 Methodmatcher 들은 정적(static), isRuntime() 메소드는 false를 반환함을 의미
  => 이 경우에 3개의 인자를 가진 matches 메소드를 결코 호출하지 않는다

- 가능하다면, AOP 프록시가 생성되었을 때 AOP 프레임워크가 pointcut 평가의 결과를 캐시하도록 하기 위해
  => pointcut을 정적(static)으로 만드는게 좋다
 

public interface MethodMatcher {

    boolean matches(Method m, Class targetClass);

    boolean isRuntime();

    boolean matches(Method m, Class targetClass, Object[] args);
}


Pointcut에서의 기능

- 조합(Union)

=> pointcut이 일치하는 어떠한 일치되는 메소드가 하나라도 있는지를 의미한다.(either)

- 교차(Intersection)

=> 두 개의 pointcut이 서로 일치하는 메소드를 의미.(both)

- org.springframework.aop.support.PointCuts 클래스내 정적 메소드나 같은 패키지내 ComposablePointcut 클래스를 사용하여 이루어 질 수 있다.

- AspjectJ pointcut 표현을 사용하는 것이 좀 더 단순한 방법이다.




AspectJ 표현 pointcuts

- 2.0 이후에 Spring에 의해 사용되는 pointcut의 가장 중요한 타입은 AspectJExpressionPointcut

- AspectJ pointcut 표현 문자열을 파싱하기 위한 AspectJ 제공 라이브러리를 사용하는 pointcut



편리한 pointcut 인터페이스 구현체들

1) 정적(Static) Pointcuts

1-1) Regular expression pointcuts(정규 표현식 pointcuts)

- Perl5RegexpMethodPointcut

=> Perl5 정규표현식 문법을 사용하는 일반적인 정규표현식 pointcut
=> 정규표현식을 일치시키기 위한 Jakarta ORO에 의존

예제)
 

                               class="org.springframework.aop.support.Perl5RegexpMethodPointcut">
   
       
            .*set.*
            .*absquatulate
       

   



- JdkRegexpMethodPointcut

=> JDK 1.4 이상에서 지원되는 정규 표현식을 사용

- RegexpMethodPointcutAdvisor 클래스

=> 특정 advice(인터셉터, before advice, throws advice)의 참조로 하여 사용할 수 있는 advisor
=> 내부적으로 메소드의 패턴을 명시하여 pointcut 기능을 구현

예제)
 

    class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
   
       
   

   
       
            .*set.*
            .*absquatulate
       

   


1-2) Attribute-driven(속성지향) pointcut

=> 메타데이터-지향 pointcut
=> 소스-레벨의 메타데이터인 메타데이터 속성의 값을 사용


2) 동적(Dynamic) pointcuts

=> 정적인(static) pointcut보다 평가하는데 좀 더 가치가 있다.
=> 정적인(sttaic) 정보만큼 메소드 인자를 고려. (모든 메소드 호출시 평가되어야만 한다)
=> 결과는 인자가 다양한 만큼 캐시될 수 없다.

2-1) 제어 흐름(Control flow) pointcuts

- 다소 덜 강력하지만 개념적으로 AspectJ cflow pointcuts와 유사
- 다른 동적인 pointcut보다 런타임시 평가하는 것이 명백히 비용이 비싸다.(Java 1.4에서 다른 동적인 pointcut의 약 5배)



Pointcut 슈퍼 클래스

- 자체적인 pointcut을 구현하기 위해 제공
- 정적인 pointcut이 가장 유용하기 때문에 대부분 StaticMethodMatcherPointcut의 하위 클래스를 이용
- 하나의 추상 메소드를 구현하는 것을 요구
 

class TestStaticPointcut extends StaticMethodMatcherPointcut {

    public boolean matches(Method m, Class targetClass) {
        // return true if custom criteria match
    }
}

 

번호 제목 글쓴이 날짜 조회 수
공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 5083
84 @ConfigurationProperties 사용하기 황제낙엽 2025.10.23 1617
83 Spring Boot 에서 서버 로직의 역할별 애노테이션 구분 황제낙엽 2025.10.13 1411
82 (확인전) [2021.03.12] Eclipse에서 Spring Boot로 JSP사용하기(Gradle) file 황제낙엽 2023.12.23 2817
81 Spring Boot PetClinic Sample Application 황제낙엽 2023.12.21 2575
80 Eclipse, Spring Boot, Gradle, SVN 레거시(2019) 시스템 유지보수 환경 구축 file 황제낙엽 2023.11.14 1732
79 [시리즈 강좌] 스프링부트로 웹서비스 구축하기 황제낙엽 2023.07.13 1691
78 Spring Boot에서의 RESTful API 모듈 file 황제낙엽 2020.04.16 1896
77 [POST] Spring MVC 구조 분석 황제낙엽 2024.01.17 2053
76 Spring Framework 에서 사용하는 annotation 황제낙엽 2024.01.17 2093
75 Spring MVC configuration file 황제낙엽 2024.01.17 2041
74 [스프링 시큐리티 OAuth2] 강의 자료와 학습용 소스 file 황제낙엽 2024.01.15 1595
73 OAuth 2.0 Resource Server - Spring Security OAuth2.0 황제낙엽 2023.12.27 2016
72 Spring, JSP, Gradle, Eclipse 환경 구축[2] - 샘플 프로젝트 file 황제낙엽 2023.12.24 1922
71 Spring, JSP, Gradle, Eclipse 환경 구축[1] - 레퍼런스 조사 황제낙엽 2023.12.23 2056
70 spring-security-samples 황제낙엽 2023.12.22 1800
69 [Bard] Spring 과 Spring Boot의 차이 file 황제낙엽 2023.12.21 1803
68 Spring 과 Spring Boot의 차이 file 황제낙엽 2020.05.26 2308
67 Spring Security OAuth2.0 파헤치기 황제낙엽 2019.09.05 2079
66 Spring Security OAuth2구현 file 황제낙엽 2019.09.05 2208
65 Spring Security OAuth 황제낙엽 2019.09.05 2442