ITEEDU

BeanNameAutoProxyCreator

如果您要为您的目标物件提供Advice,则您必须为它们建立代理物件,在应用程式规模大时,如 果要提供Advice的目标物件很多,则一个一个为它们建立代理物件会是件麻烦的事,为此,Spring 为一些情况提供自动代理。

您可以为目标物件取好适当的Bean名称,例如为某些服务物件取名为xxxService,这么一来,您 可以使用 org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator 来为这些 Bean  设 定 自 动 代 理 , 例 如 DelegatingIntroductionInterceptor 中 就 可 以 改 用 BeanNameAutoProxyCreator来建立自动代理,只要改一下Bean定义档就可以了:

•      beans‐config.xml
<?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  会自动建立代理物件。