스프링은 AOP 관련 설정을 어노테이션 방식과 XML 방식으로 지원한다.
<aop:config> : 루트엘리먼트
<aop:pointcut>, <aop:aspect> : 하위 엘리먼트
<aop:config>와 하위 엘리먼트들의 포함관계는 아래 그림과 같다.
allPointcut이라는 포인트컷은 com.mirim.biz 패키지로 시작하는 클래스 중에서 이름이 Impl로 끝나는 클래스의 모든 메소드를 포인트 컷으로 설정.
그리고 애스팩트 설정에서 <aop:before>엘리먼트의 pointcut-ref 속성으로 포인트컷을 참조.
④allPointcut으로 설정한 포인트컷 메소드가 호출 될 때(①)
log라는 어드바이스 객체(②)의 printLog메소드가 실행되고(③)이때
printLog(④)메소드 동작 시점이 <aop:before>라는 설정
포인트컷 표현식
포인트컷을 이용하면 어드바이스 메소드가 적용될 비즈니스 메소드를 정확하게 필터링을 할 수 있다.
포인트컷 표현식은 execution 명시자를 이용하며, 명시자 안에 포인트컷 표현식을 기술한다.
① 리턴타입 지정
리턴타입 지정에서 가장 기본적인 방법은 *를 이용하는 것
② 패키지 경로
패키지 경로를 지정할 때는 *, .. 를 이용
③ 클래스 지정
클래스 이름을 지정할 때는 *, + 를 이용한다.
④ 메소드 지정
메소드를 지정할 때는 주로 *를 사용하고 매개변수를 지정할 때는 ..을 사용
⑤ 매개변수 지정
매개변수를 지정할 때는 ..나 * 를 사용하거나 정확한 타입을 지정한다.