单个代理通过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注入
