원하는 메서드만 겉 업무에 포함시키는 방법
겉 업무는 Cross-cutting Cncern의 Proxy를 통해서 Core Concern에 붙여 넣게 된다. -> Weaving
여기서 Core Concern에 join하게될 메서드를 JoinPoint라고 한다.
메서드에 target을 선정하지 않으면 모두 JoinPoint대상이 되어서 모두 Weaving이 일어난다.
원하는 메서드만 Weaving 하는 것이 Pointcuts 라고 한다.
Before로그에 total 메서드만 포함시키기
classicBeforeAdvidor은 classicPointCut과 logBeforeAdvice를 연결해준다.
setting.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<bean id="target" class="spring.aop.entity.NewlecExam" p:kor="1" p:eng="1" p:math="1" p:com="1"/>
<bean id="logAroundAdvice" class="spring.aop.advice.LogAroundAdvice" />
<bean id="logBeforeAdvice" class="spring.aop.advice.LogBeforeAdvice" />
<bean id="logAfterReturningAdvice" class="spring.aop.advice.LogAfterReturningAdvice" />
<bean id="logAfterThrowingAdvice" class="spring.aop.advice.LogAfterThrowingAdvice" />
<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="proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="target" />
<property name="interceptorNames">
<list>
<value>logAroundAdvice</value>
<value>logBeforeAdvice</value>
<value>logAfterReturningAdvice</value>
<value>logAfterThrowingAdvice</value>
</list>
</property>
</bean>
</beans>
하지만 같은 대상으로 하는 Pointcut을 설정할 때마다 Advisor를 여러번 만들어야 하는 불편사항이 있다.
최초 버전이기 때문에 편하게 만드는 다른 간소화된 방법이 있다.
간소화된 Advisor
org.springframework.aop.support.NameMatchMethodPointcutAdvisor 클래스 사용
Advisor가 Poincut의 기능을 내장하고 있는 결합된 형태
밑의 두가지를 합친 Advisor을 만들어 보려고 한다.
변경 후
매서드가 여러개일 경우 mappedNames
정규 표현식 (Regular Expression) - 함수명이 많을때 패턴으로 지정하기