技术开发 频道

spring aop中单独代理和自动代理的设置

【IT168 技术文档】spring的aop机制提供两类方式实现类代理。一种是单个代理,一种是自动代理。

单个代理通过ProxyFactoryBean来实现,自动代理通过BeanNameAutoProxyCreator或者 DefaultAdvisorAutoProxyCreator实现。


为了给程序加入日志功能,我们采用aop的方式。编写一个日志通知类 :com.tixa.fms.service.server.LogService

配置文件中添加以下代码:

<!--设置日志通知--> <bean id="logAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice"> <bean class="com.tixa.fms.service.server.LogService"/> </property> <property name="patterns"> <list> <value>.*insertNadCustomerRealFinance.*</value> </list> </property> </bean>

一、采用单个代理方式 (费时费力,项目中需要多出加入通知的话,不会采用此方式)

需要在beans.xml中添加:

<!--<bean id="log" class="org.springframework.aop.framework.ProxyFactoryBean">--> <!--<property name="proxyInterfaces" value="com.tixa.fms.domain.logic.FinanceInFacade" />--> <!--<property name="interceptorNames">--> <!--<list>--> <!--<value>logAdvisor</value>--> <!--</list>--> <!--</property>--> <!--<property name="target">--> <!--<ref local="financeInFacade" />--> <!--</property>--> <!--</bean> -->


项目中其他通过注入方式设置FinanceInFacade属性的bean,不能直接注入FinanceInFacade的bean id.而要注入代理的bean id,此例中就是 log。

<bean id="financeInController" class="com.tixa.fms.web.spring.FinanceInController"> <property name="financeInFacade"><ref local="log"/></property> <property name="methodNameResolver" ref="methodNameResolver"/> </bean>


二、自动代离方式: 

<!--自动代理--> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>


增加此行,容器会自动根据通知要匹配的切入点,为包含切入点的类创建 代理。

需要注入代理的地方依然按照原来的bean id注入



0
相关文章