上一节介绍的都是使用ProxyFactoryBean实现代理对象的创建,本节介绍使用自动代理实现。通过自动代理,可以实现自动为多个目标Bean实现AOP代理、避免客户端直接访问目标Bean(即getBean返回的都是Bean的代理对象)。spring的自动代理是通过BeanPostProcessor实现的,容器载入xml配置后会修改bean为代理Bean,而id不变。
ApplicationContext可以直接检测到定义在容器中的BeanPostProcessor,BeanFactory需要手动添加。
有2种常用的BeanPostProcessor:
1.BeanNameAutoProxyCreator
2.DefaultAdvisorAutoProxyCreator
1、BeanNameAutoProxyCreator
使用通配符*可以为所有以Service结尾的目标Bean实现AOP代理。
2、DefaultAdvisorAutoProxyCreator
[quote]interceptorNames:They can be of any advice or advisor type Spring supports[/quote]
ApplicationContext可以直接检测到定义在容器中的BeanPostProcessor,BeanFactory需要手动添加。
有2种常用的BeanPostProcessor:
1.BeanNameAutoProxyCreator
2.DefaultAdvisorAutoProxyCreator
1、BeanNameAutoProxyCreator
<bean id="loginBeforeAdvisor" .../>
<bean id="loginThrowsAdvisor" .../>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 注入目标Bean -->
<property name="beanNames" value="*Service">
</property>
<property name="interceptorNames">
<list>
<value>loginBeforeAdvisor</value>
<value>loginThrowsAdvisor</value>
</list>
</property>
</bean>
使用通配符*可以为所有以Service结尾的目标Bean实现AOP代理。
2、DefaultAdvisorAutoProxyCreator
<bean id="loginBeforeAdvisor" .../>
<bean id="loginThrowsAdvisor" .../>
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
[quote]interceptorNames:They can be of any advice or advisor type Spring supports[/quote]