✔ 포인트컷 지시자
포인트컷 표현식은 execution 같은 포인트컷 지시자(Pointcut Designator)로 시작한다. (줄여서 PCD)
◽ 포인트컷 지시자의 종류
• execution : 메소드 실행 조인 포인트를 매칭한다. 스프링 AOP에서 가장 많이 사용하고, 기능도 복잡하다.
• within : 특정 타입 내의 조인 포인트를 매칭한다.
• args : 인자가 주어진 타입의 인스턴스인 조인 포인트
• this : 스프링 빈 객체 (스프링 AOP 프록시)를 대상으로 하는 조인 포인트
• target : Target 객체(스프링 AOP 프록시가 가르키는 실제 대상)를 대상으로 하는 조인 포인트
• @target : 실행 객체의 클래스에 주어진 타입의 애노테이션이 있는 조인 포인트
• @within : 주어진 애노테이션이 있는 타입 내 조인 포인트
• @annotation : 메서드가 주어진 애노테이션을 가지고 있는 조인 포인트를 매칭
• @args : 전달된 실제 인수의 런타임 타입이 주어진 타입의 애노테이션을 갖는 조인 포인트
• bean : 스프링 전용 포인트컷 지시자, 빈의 이름으로 포인트컷을 지정한다.
가장 많이 사용하는 것은 execution 문법이다.
◽ execution 문법
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-
pattern(param-pattern)
throws-pattern?)
execution(접근제어자? 반환타입 선언타입?메서드이름(파라미터) 예외?)
• 메소드 실행 조인 포인트를 매칭한다.
• ? 는 생략할 수 있다.
• * 같은 패턴을 지정할 수 있다.
➕ 패키지에서 . , .. 의 차이를 이해해야 한다.
• . : 정확하게 해당 위치의 패키지
• .. : 해당 위치의 패키지와 그 하위 패키지도 포함
◽ execution 파라미터 매칭 규칙
• (String) : 정확하게 String 타입 파라미터
• () : 파라미터가 없어야 한다.
• (*) : 정확히 하나의 파라미터, 단 모든 타입을 허용한다.
• (*, *) : 정확히 두 개의 파라미터, 모든 타입을 허용한다. 참고로 파라미터가 없어도 된다. 0..* 로 이해하면 된다.
• (String, ..) : String 타입으로 시작해야 한다. 숫자와 무관하게 모든 파라미터, 모든 타입을 허용한다.
예) (String), (String, Xxx), (String, Xxx, Xxx) 허용
◽ @target, @within
• @target : 실행 객체의 클래스에 주어진 타입의 애노테이션이 있는 조인 포인트
• @within : 주어진 애노테이션이 있는 타입 내 조인 포인트
➕ @target, @within 은 다음과 같이 타입에 있는 애노테이션으로 AOP 적용 여부를 판단한다.
• @target(hello.aop.member.annotation.ClassAop)
• @within(hello.aop.member.annotation.ClassAop)
➕ @target vs @within
• @target 은 인스턴스의 모든 메서드를 조인 포인트로 적용한다.
• @within 은 해당 타입 내에 있는 메서드만 조인 포인트로 적용한다.
@target 은 부모 클래스의 메서드까지 어드바이스를 다 적용하고, @within 은 자기 자신의 클래스에 정의된 메서드에만 어드바이스를 적용한다.
참고 : 인프런 ) 스프링 핵심 원리 - 고급편 (김영한)
'Back > Spring' 카테고리의 다른 글
[Spring/Security] 구글 회원 프로필 정보 받아오기 (5) | 2023.06.23 |
---|---|
[Spring/Security] 구글 로그인 준비 (6) | 2023.06.23 |
[Spring] 예제 프로젝트 만들기 - 상품 주문 프로세스 (2) | 2023.05.22 |
[Spring] 회원 관리 (2) - 서비스 개발 / test (0) | 2023.04.28 |
[Spring] 회원 관리 (1) - repository / Test case (0) | 2023.04.28 |