추상(abstract) 애스펙트 클래스를 상속받아 포인트컷 메소드나 어드바이스 메소드를 오버라이딩하는 경우에 무엇이 적용되는가에 대해서 정리합니다. (참고로 애스펙트는 abstract 애스펙트만 상속받을 수 있습니다)
포인트컷 메소드 오버라이딩
추상 애스펙트에 정의된 (non-abstract) 포인트컷 메소드를 하위 애스펙트에서 오버라이딩하는 경우
(1) 포인트컷을 재정의하지 않은 경우
=> 추상 애스펙트의 포인트컷이 적용됨
(2) 포인트컷을 재정의한 경우
=> 하위 애스펙트의 포인트컷이 적용됨
결론 : 자식 애스펙트에서 부모 애스펙트에 정의된 포인트컷을 재정의할 수 있다.
어드바이스 메소드 오버라이딩
추상 애스펙트에 정의된 어드바이스 메소드를 하위 애스펙트에서 오버라이딩하는 경우
(1) 어드바이스를 재정의하지 않은 경우
=> 추상 애스펙트의 어드바이스가 적용되지만 동작(메소드)는 하위 애스펙트의 것이 적용됨
(2) 어드바이스도 재정의한 경우
=> 추상 애스펙트의 어드바이스도 적용되고 하위 애스펙트의 어드바이스도 적용됨. 동작(메소드)은 하위 애스펙트의 것이 적용됨
결론 : 자식 애스펙트에서는 부모 애스펙트에 정의된 어드바이스의 동작(메소드 내용)은 재정의할 수 있지만,
언제(before, after 등) 어드바이스를 적용할지는 수정할 수 없다(무조건 새로운 적용 위치가 추가됨).
'Framework' 카테고리의 다른 글
[AspectJ] aspect 재사용 방법 (0) | 2012.04.29 |
---|---|
[AspectJ] @within() 과 @annotation() 차이점 (0) | 2012.04.26 |
[하이버네이트] lazy=true인 연관객체 미리 로딩하기 (0) | 2010.01.29 |
iBatis Abator 이름 변경 - iBATOR (1) | 2008.07.07 |
링크 : 어노테이션 기반 validation (0) | 2008.04.12 |