根据(一)、(二)中介绍的方法已经学会了切面的配置,但都是使用org.springframework.aop.framework.ProxyFactoryBean配置的代理,该方法只能为单个类配置代理。在实际使用中并不方便,因此我们还要学习Spring提供的自动创建功能。
方法一:使用BeanNameAutoProxyCreator
其中beanNames用来匹配Spring中配置的bean名称,例如*routeService是匹配那些name或id以routeService结尾的bean。interceptorNames则是用来添加那些要使用的增强,optimize指定代理类用cglib来产生。
方法二:使用DefaultAdvisorAutoProxyCreator
该方法的配置最为简单,它会自动为所有的增强所匹配的bean创建相应的代理。
以上两种方法可以只选用其中的一个来简化配置。
方法一:使用BeanNameAutoProxyCreator
<!-- 通过bean的名字来匹配选择要代理的bean,在使用时仍用原有bean的id从context中获取 -->
<bean id="autoProxy"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 需要代理的service,以userService结尾注册的bean -->
<property name="beanNames">
<list>
<value>*userService</value>
<value>*routeService</value>
</list>
</property>
<!-- 拦截器的名称 -->
<property name="interceptorNames">
<list>
<value>validateUserAdvisor</value>
<!-- 性能监视增强 -->
<value>performanceMonitorAdvice</value>
</list>
</property>
<!-- 设置强制使用CGLIB生成代理,此时代理的bean如果已经是代理则必须也是由cglib生成的 -->
<property name="optimize" value="true" />
</bean>
其中beanNames用来匹配Spring中配置的bean名称,例如*routeService是匹配那些name或id以routeService结尾的bean。interceptorNames则是用来添加那些要使用的增强,optimize指定代理类用cglib来产生。
方法二:使用DefaultAdvisorAutoProxyCreator
<!-- 自动代理创建器,使用了该创建器就不需要autoProxy了。它会根据advisor中的配置自动找到匹配的类和方法,并为之创建代理 -->
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />
该方法的配置最为简单,它会自动为所有的增强所匹配的bean创建相应的代理。
以上两种方法可以只选用其中的一个来简化配置。