Spring AOP(2)

上一节介绍的都是使用ProxyFactoryBean实现代理对象的创建,本节介绍使用自动代理实现。通过自动代理,可以实现自动为多个目标Bean实现AOP代理、避免客户端直接访问目标Bean(即getBean返回的都是Bean的代理对象)。spring的自动代理是通过BeanPostProcessor实现的,容器载入xml配置后会修改bean为代理Bean,而id不变。
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"/>

引用
interceptorNames:They can be of any advice or advisor type Spring supports

你可能感兴趣的:(spring,AOP,bean,xml)