如果您要为您的目标物件提供Advice,则您必须为它们建立代理物件,在应用程式规模大时,如 果要提供Advice的目标物件很多,则一个一个为它们建立代理物件会是件麻烦的事,为此,Spring 为一些情况提供自动代理。
您可以为目标物件取好适当的Bean名称,例如为某些服务物件取名为xxxService,这么一来,您 可以使用 org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator 来为这些 Bean 设 定 自 动 代 理 , 例 如 DelegatingIntroductionInterceptor 中 就 可 以 改 用 BeanNameAutoProxyCreator来建立自动代理,只要改一下Bean定义档就可以了:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN""http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="someService" class="onlyfun.caterpillar.Some"/> <bean id="lockIntroduction" class="onlyfun.caterpillar.LockIntroduction"/> <bean id="lockAdvisor" class="org.springframework.aop.support.DefaultIntroductionAdvisor"> <constructor-arg index="0"> <ref bean="lockIntroduction"/> </constructor-arg> <constructor-arg index="1"> <value>onlyfun.caterpillar.ILockable</value> </constructor-arg> </bean> <bean id="introductionProxyCreator" class="org.springframework.aop.framework. → autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>*Service</value> </list> </property> <property name="interceptorNames"> <value>lockAdvisor</value> </property> </bean> </beans>
执行的结果不变,而这样的设定,如果您打算让某个目标物件套用 Advice 时,就只要将其名称 取名为 xxxService 就可以了,Spring 会自动建立代理物件。