BeanNameAutoProxyCreator 사용 예
@Test
public void anotherClassesJoinPoint() {
keesun.getAge();
movie.getName();
hein.getCard().getPoint();
}
public void anotherClassesJoinPoint() {
keesun.getAge();
movie.getName();
hein.getCard().getPoint();
}
Customer, Movie, MemberShipCard 객체에 있는 getter들이 호출 될 때 어떤 일을 추가하고 싶을 때 각각의 ProxyFactoryBean을 만드는 대신 BeanNameAutoProxyCreator를 사용하여 advisor가 적용될 bean들을 등록해 두면 자동으로 해당 bean의 프록시를 만들어 사용하게 됩니다.
먼저 간단한 before Advice를 하나 만들고 bean으로 등록 합니다.
public class GetterAdvice implements MethodBeforeAdvice {
public void before(Method method, Object[] args, Object target) throws Throwable {
System.out.println("getter joined " + target.getClass().getName() + " class " + method.getName());
}
}
<bean id="getter" class="aop.oldStyle.advice.GetterAdvice" />
그리고 이제 BeanNameAutoProxyCreator를 bean으로 등록합니다.
<!-- BeanNameAutoProxyCreator -->
<bean id="getterAutoProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator" >
<property name="beanNames">
<list>
<value>혜인</value>
<value>기선</value>
<value>KCcard</value>
<value>movie</value>
</list>
</property>
<property name="interceptorNames" value="getter" />
</bean>
<bean id="getterAutoProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator" >
<property name="beanNames">
<list>
<value>혜인</value>
<value>기선</value>
<value>KCcard</value>
<value>movie</value>
</list>
</property>
<property name="interceptorNames" value="getter" />
</bean>
beanNames속성에는 advice가 적용될 bean들을 적어 줍니다. 여기에서도 역시 와일드 카드를 사용하여 하나의 문장으로 여러 bean을 나타낼 수 있습니다.
테스트를 실행하면 콘솔창에서 다음과 같은 메시지를 확인할 수 있습니다.
getter joined aop.oldStyle.domain.Customer class getAge
getter joined aop.oldStyle.domain.Movie class getName
getter joined aop.oldStyle.domain.Customer class getCard
getter joined aop.oldStyle.domain.MemberShipCard class getPoint
getter joined aop.oldStyle.domain.Movie class getName
getter joined aop.oldStyle.domain.Customer class getCard
getter joined aop.oldStyle.domain.MemberShipCard class getPoint