您的位置:首页 > 编程语言 > Java开发

spring中联合使用声明事务代理和环绕通知

2016-07-29 00:00 579 查看
今天仔细想了想,终于找到解决方案了。
首先对BO进行声明性事务代理。
然后在配置环绕通知时将目标对象设为事务代理对象。
例如:
<bean id="bo" class="com.bo.BO">
<property name="dao" ref="dao"> </property>
</bean>

<bean id="proxyBo" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="target" ref="bo"> </property>
<property name="transactionManager" ref="htm"> </property>
<property name="transactionAttributes">
<props>
<prop key="*"> PROPAGATION_REQUIRED </prop>
</props>
</property>

</bean>

上面是给bo装备事务代理,target指明了目标对象是我1个id为bo的bean.

<bean id="interceptor" class="com.util.MyBoLogger">
</bean>

<bean id="myadvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice" ref="interceptor"> </property>
<property name="pattern" value="com.bo.BO.*"> </property>
</bean>

<bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="proxyBo"> </property>
<property name="interceptorNames">
<list>
<value> myadvisor </value>
</list>
</property>
<property name="proxyInterfaces">
<list>
<value> com.bo.BOIF </value>
</list>
</property>
</bean>
这是添加环绕通知,在 <bean id="logProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
中, <property name="target" ref="proxyBo"> </property> 目标对象是前面设置好的事务代理bean.
前提是要使用jdk的动态代理,不能用cglib,让BO类实现1个接口就可以了,我的接口是com.bo.BOIF,
需要用 <property name="proxyInterfaces"> 指明。

让需要注入bo这个bean的时候,
<bean name="/login" class="com.ness.struts.action.LoginAction">
<property name="bo" ref="logProxy"> </property>
</bean>

直接注入环绕通知bean.我的是logProxy。现在调用bo这个bean的时候就有了事务和环绕2种代理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Spring Bean AOP DAO Struts