이제까지 다룬 AOP의 구조도는 다음과 같다. 사용자 관점에서 Cross-cutting Concern 사이에 Core Concern을 삽입하는데 Proxy객체를 사용한다. 이 때 Core Concern의 각 메소드 마다 Proxy 객체를 통해 Cross-cutting이 실행되므로 모든 메소드가 Join Point가 된다. 그 일련의 과정은 Weaving이라고 한다.
하지만 Core Concern의 모든 메소드를 Join Point로 잡고 싶지않고 일부만 통과하도록 정하기 위해서는 Point Cut을 활용해야 한다.
xml에 Point Cut 객체를 생성하고 이를 DI할 수 있도록 추가/변경해준다. Point Cut 생성 시 NameMatchMethodPointcut 클래스를 사용하며 매핑할 메소드를 선택한다. 메소드마다 이를 활용할 매개체 생성 시 클래스는 DefaultPointcutAdvisor가 되어 advice 세터에 원하는 Advice 객체를 넣어준다.
<bean id="classicPointCut" class="org.springframework.aop.support.NameMatchMethodPointcut" >
<property name="mappedName" value="total" />
</bean>
<bean id="classicBeforeAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="advice" ref="logBeforeAdvice" />
<property name="pointcut" ref="classicPointCut" />
</bean>
<bean id="classicAroundAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="advice" ref="logAroundAdvice" />
<property name="pointcut" ref="classicPointCut" />
</bean>
<bean id="exam" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="target"></property>
<property name="interceptorNames">
<list>
<value>classicAroundAdvisor</value>
<value>classicBeforeAdvisor</value>
<value>logAfterReturningAdvice</value>
<value>logAfterThrowingAdvice</value>
</list>
</property>
</bean>
하지만 위와 같은 구성은 Advice 당 Point Cut이 하나씩 매칭이 되어 불편함이 있다. 다음에 간편한 사용법을 알아본다.