Spring #24 AOP Point Cut

underlier12·2020년 2월 14일
0

SPRING

목록 보기
24/25

24. AOP Point Cut

AOP 구현 방식

이제까지 다룬 AOP의 구조도는 다음과 같다. 사용자 관점에서 Cross-cutting Concern 사이에 Core Concern을 삽입하는데 Proxy객체를 사용한다. 이 때 Core Concern의 각 메소드 마다 Proxy 객체를 통해 Cross-cutting이 실행되므로 모든 메소드가 Join Point가 된다. 그 일련의 과정은 Weaving이라고 한다.

하지만 Core Concern의 모든 메소드를 Join Point로 잡고 싶지않고 일부만 통과하도록 정하기 위해서는 Point Cut을 활용해야 한다.

setting.xml

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이 하나씩 매칭이 되어 불편함이 있다. 다음에 간편한 사용법을 알아본다.

profile
logos and alogos

0개의 댓글