AspectJ 문서에는 아래와 같이 @within()과 @annotation()에 대해 설명합니다.
즉, Anno라는 어노테이션에 대해서(제가 제대로 해석했다면...)
- @within(Anno) : Anno 어노테이션을 갖는 타입(클래스) 안에 정의된 코드와 관련된 조인포인트
- @annotation(Anno) : 조인포인트 대상이 Anno 어노테이션을 갖는 조인포인트
http://whiteship.tistory.com/379 에서는 이렇게 설명합니다.
- @within(Type) : 선언된 타입에 @Type 어노테이션이 붙어있을 때 그 객체의 모든 execution Join point를 나타냅니다.
- @annotation(Type) : 실행되는 메소드에 @Type 어노테이션이 붙어있을 때 그 메소드의 execution Join point를 나타냅니다.
http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:fdl:aop:aspectj 에서는 이렇게 설명하네요.
- @within(Transactional) : 대상 객체의 선언 타입이 @Transactional 어노테이션을 갖는 모든 결합점
- @annotation(Transactional) : 실행 메소드가 @Transactional 어노테이션을 갖는 모든 결합점
그러니까 @within()은 어노테이션이 붙은 클래스에 적용되고, @annotation()은 어노테이션이 붙은 메소드에 적용된다고 심플하게 이해하고 사용하면 될듯합니다만, 정확히 하자면 @annotation()은 조인포인트가 클래스건 메소드건 따지지 않는 것으로 보입니다.
(1) @annotation(Anno) && within(my.aop.*)
=> my.aop 패키지의 클래스 중에서 Anno 어노테이션이 붙은 클래스
대충 감이 오네요.
참고로 @annotation(Anno) && execution(* test*(..)) 포인트컷은 이렇게도 표현할 수 있습니다.
execution(@Anno * test*(..))
'Framework' 카테고리의 다른 글
[AspectJ] aspect 오버라이딩 (0) | 2012.04.29 |
---|---|
[AspectJ] aspect 재사용 방법 (0) | 2012.04.29 |
[하이버네이트] lazy=true인 연관객체 미리 로딩하기 (0) | 2010.01.29 |
iBatis Abator 이름 변경 - iBATOR (1) | 2008.07.07 |
링크 : 어노테이션 기반 validation (0) | 2008.04.12 |