Whiteship's Note

기선 씨네마 :: Advice

AOP : 2007.03.30 13:01


만드는 방법은 이전에도 살짝 살펴봤지만 소스는 아래와 같습니다.
public class WelcomeAdvice implements MethodBeforeAdvice {

    public void before(Method method, Object[] args, Object target) throws Throwable {
        System.out.println("어떤 영화를 보시겠습니까?");
    }

}

public class ThankYouAdvice implements AfterReturningAdvice {

    public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
        System.out.println("감사합니다.");
    }

}

Advice만 만든 상태에서 이걸 ProxyFactoryBean에 주입시킵니다.
    <!-- Advice -->
    <bean id="welcome" class="aop.oldStyle.advice.WelcomeAdvice" />
    <bean id="thanks" class="aop.oldStyle.advice.ThankYouAdvice" />

    <!-- AOP cinema -->
    <bean id="AOP씨네마" class="org.springframework.aop.framework.ProxyFactoryBean" >
        <property name="proxyInterfaces" value="aop.oldStyle.domain.Cinema" />
        <property name="interceptorNames">
            <list>
                <value>welcome</value>
                <value>thanks</value>
            </list>
        </property>
        <property name="target" ref="기선씨네마" />
    </bean>

이제 테스트를 해봅니다.
    @Test
    public void aopKeesunCinema() {
        hein.buyTicket(aopCinema, movie);
    }

당연히 원한대로의 결과가 나옵니다.
어떤 영화를 보시겠습니까?
감사합니다.

그럼 ProxyFactoryBean에 지정한 인터페이스의 다른 메소드들을 호출하면 어떻게 될까요?
    @Test
    public void onlyAdviceTest() {
        aopCinema.checkTicket(hein, movie);
        aopCinema.giveMemberShipCard(hein);
        aopCinema.playMovie(movie);
        aopCinema.sellTicket(movie, new Date());
    }

전혀.. 원하던 결과가 아니게 됩니다.
어떤 영화를 보시겠습니까?
감사합니다.
어떤 영화를 보시겠습니까?
감사합니다.
어떤 영화를 보시겠습니까?
공공의적상영합니다.
감사합니다.
어떤 영화를 보시겠습니까?
감사합니다.

ProxyFactoryBean에는 Advice도 등록할 수 있고 포인트컷은 해당 인터페이스에 지정한 모든 메소드가 라는 걸 확인 할 수 있습니다.

이래서 포인트컷으로 원하는 곳에만 Advice가 적용될 수 있도록 지정한뒤, 그것을 Advice와 뭉쳐서 Advisor로 등록하고 그것을 Advice를 등록한 위치(interceptorNames)에 넣어 두면 원하는 곳에만 원하는 일을 추가할 수 있게 되겠습니다.

'AOP' 카테고리의 다른 글

AspectJ In Action 3장  (0) 2007.08.22
BeanNameAutoProxyCreator 사용 예  (0) 2007.04.01
Autoproxy  (0) 2007.04.01
Spring AOP(old) ProxyFactoryBean 불편한 점  (0) 2007.03.30
기선 씨네마 :: Pointcut  (0) 2007.03.30
기선 씨네마 :: Advice  (0) 2007.03.30
기선 씨네마 :: 티켓 만들어 주기  (0) 2007.03.30
Spring AOP 공부를 위한 예제 - 기선 씨네마  (0) 2007.03.30
Spring AOP(old) Pointcut Implementation  (0) 2007.03.28
Spring AOP(old) Advisor  (0) 2007.03.28
Spring AOP(old) Pointcut  (0) 2007.03.28
top

Write a comment.




: 1 : ··· : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : ··· : 40 :