반응형
XML 스키마 혹은 @Aspect 어노테이션을 이용해서 Aspect를 설정할 때 AspectJ 문법을 이용해서 Pointcut을 설정합니다.
- 다양한 Pointcut 명시자를 제공하지만 스프링에서는 메서드 호출과 관련된 명시자만 지원하고 있습니다.
Pointcut 표현식 종류
- execution 명시자
- within 명시자
- bean 명시자
- Pointcut의 조합
execution 명시자
execution 명시자는 Advice를 적용할 메서드를 명시할 때 사용합니다.
- 기본 형식
execution(리턴타입패턴 패키지경로패턴.클래스이름패턴.메서드이름패턴(파라미터패턴))
- 각 패턴은 "*"을 이용하여 모든 값을 표현할 수 있습니다.
- "."을 이용해서 0개 이상이라는 의미를 표현할 수 있습니다.
- 클래스이름 뒤에 +를 사용하여 해당 클래스로부터 파생된 모든 자식클래스를 선택합니다.
- 인터페이스 이름 뒤에 +를 사용하면 해당 인터페이스를 구현한 모든 클래스를 선택합니다.
- 예시
위 xml 설정에서 pointcut의 expression만 봐보면
이런식으로 볼 수 있고 밑 execution의 get*(..) 은 get으로 시작하는 모든 메소드와 메소드에 전해지는 파라미터가 0개 이상인 것으로 생각하면 됩니다.
within 명시자
within 명시자는 메서드가 아닌 특정타입에 속하는 메서드를 Pointcut으로 설정할 때 사용합니다.
- 예시와 해설
within(zinc.spring.board.service.WriterArticleService)
<!-- WriteArticleService 인터페이스의 모든 메서드 호출) -->
within(zinc.spring.board.service.*)
<!-- zinc.spring.board.service 패키지에 있는 모든 메서드 호출 -->
within(zinc.spring.board..*)
<!-- zinc.spring.board 패키지 및 그 하위 패키지에 있는 모든 메서드 호출 -->
bean 명시자
스프링 빈이름을 이용하여 Pointcut을 정의
- 예시와 해설
bean(writeArticleService)
<!-- 이름이 writeArticleService인 빈의 메서드 호출 -->
bean(*ArticleService)
<!-- 이름이 ArticleService로 끝나는 빈의 메서드 호출 -->
Pointcut의 조합
- 각각의 표현식은 "&&" 나 "||" 연산자를 이용하여 연결할 수 있고 "and", "or"을 사용해도 된다.
반응형
'language > Spring' 카테고리의 다른 글
[Java/Spring] Spring project에 Spring JDBC 설정하기 1 (0) | 2022.03.21 |
---|---|
[Java/Spring] JoinPoint와 바인드 변수 (0) | 2022.03.20 |
[Java/Spring] 빈 객체 라이프 사이클 (0) | 2022.03.20 |
[Java/Spring] Spring AOP 개념 (0) | 2022.03.20 |
[Spring/Maven] Spring 프로젝트에 오라클 드라이버 적용시키기 (Eclipse) (0) | 2022.03.16 |