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

2007-04-12     推荐:10832566    收藏:7009295    评论:0     来源:IT168
【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条评论  点击查看更多评论
  • 网友评论仅供网友表达个人看法,并不表明e800同意其观点或证实其描述
我想发表评论:
用户名密码
  • 匿名发表
    验证码: