day2 class02 AOP용어 및 기본 설정
1. 조인포인트(Joinpoint)
- 클라이언트가 호출하는 모든 비즈니스 메소드 (예: BoardServiceImpl, UserServiceImpl)
- 조인포인트 중에서 포인트컷이 선택되기 때문에 포인트컷 대상, 포인트컷 후보라고도 함
2. 포인트컷(Pointcut)
- 필터링된 조인포인트
- 트랜잭션의 경우 횡단 관심은 등록, 수정, 삭제 기능의 비즈니스 메소드에 대해서는 당연히 동작해야 하지만, 검색 기능의 메소드에 대해서는 트랜잭션과 무관하므로 동작할 필요가 없다. 이렇게 수많은 비즈니스 메소드 중에서 특정 메소드에서만 횡단 관심에 해당하는 공통 기능을 수행하는 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- applicationContext.xml --> <bean id="log" class="com.springbook.biz.common.LogAdvice"></bean> <aop:config> <aop:pointcut id="allPointcut" expression="execution(* com.springbook.biz..*Impl.*(..))"/> <aop:pointcut id="getPointcut" expression="execution(* com.springbook.biz..*Impl.get*(..))"/> <aop:aspect ref="log"> <aop:before pointcut-ref="getPointcut" method="printLog"/> </aop:aspect> </aop:config> | cs |
5. AOP 용어 종합
5.1 <aop:config> 엘리먼트
- 루트엘리먼트이다.
- 설정 파일 내에 여러번 사용 할 수 있다.
5.2 <aop:pointcut> 엘리먼트
- 포인트컷 지정하기 위해 사용한다.
5.3 <aop:aspect> 엘리먼트
- 핵심 관심에 해당하는 포인트컷 메소드와 횡단 관심에 해당하는 어드바이스 메소드를 결합하기 위해 사용한다.
5.4 <aop:advisor> 엘리먼트
- 애스팩트는 어드바이스의 아이디와 메소드 이름을 알아야하지만 모르거나 확인할 수 없을 경우에 사용한다.
- 간단한 예제 소스가 있지만 뒤에 나오면 그 부분에서 정리해야겠다.
5.5 포인트컷 표현식
5.5.1 리턴타입 지정
표현식 |
설명 |
* |
모든 리턴타입 허용 |
void |
리턴타입이 void인 메소드 선택 |
!void |
리턴타입이 void가 아닌 메소드 선택 |
5.5.2 패키지 지정
표현식 |
설명 |
com.springBook.biz |
정확하게 com.springBook.biz 패키지만 선택 |
com.springBook.biz.. |
com.springBook.biz 패키지로 시작하는 모든 패키지 선택 |
com.springBook..impl |
com.springBook 패키지로 시작하면서 마지막 패키지 이름이 impl로 끝나는 패키지 선택 |
5.5.3 클래스 지정
표현식 |
설명 |
BoardServiceImpl |
정확하게 BoardServiceImpl 클래스만 선택 |
*Impl |
클래스 이름이 Impl로 끝나는 클래스만 선택 |
BoardService+ |
클래스 이름 뒤에 +가 붙으면 해당 클래스로부터 파생된 모든 자식 클래스 선택 인터페이스 뒤에 +가 붙으면 해당 인터페이스를 구현한 모든 클래스 선택 |
5.5.4 메소드 지정
표현식 |
설명 |
*(..) |
가장 기본 설정으로 모든 메소드 선택 |
get*(..) |
메소드 이름이 get으로 시작하는 모든 메소드 선택 |
5.5.5 매개변수 지정
표현식 |
설명 |
(..) |
가장 기본 설정으로서 매개변수의 개수와 타입에 제약이 없음을 의미 |
(*) |
반드시 1개의 매개변수를 가지는 메소드만 선택 |
(com.springbook.user.UserVO) |
매개변수로 UserVO를 가지는 메소드만 선택, 이때 클래스의 패키지 경로가 반드시 포함되어야 함 |
(!com.springbook.user.UserVO) |
매개변수로 UserVO를 가지지 않는 메소드만 선택 |
(Integer, ..) |
한 개 이상의 매개변수를 가지되, 첫 번째 매개변수의 타입이 Integer인 메소드만 선택 |
(Integer, *) |
반드시 두 개의 매개변수를 가지되, 첫 번째 매개변수의 타입이 Integer인 메소드만 선택 |