`
springking
  • 浏览: 131199 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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

阅读更多

今天仔细想了想,终于找到解决方案了。
首先对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种代理。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics