원하는 메서드만 겉 업무에 포함시키는 방법

    겉 업무는 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) - 함수명이 많을때 패턴으로 지정하기

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading