转载自JavaEye ,原文链接: http://www.javaeye.com/article/19317
在 spring 中, 事务管理一般是通过声明一个 txProxyTemplate, 然后业务 bean 中 parent = "txProxyTemplate", 这样做未免显得有些繁琐, 并且如果业务 bean 还需要其他拦截器, 配置也不太方便, 下面贴出我的配置, 用 DefaultAdvisorAutoProxyCreator 实现自动代理
代码
- <beans>
-
- <bean id="transactionManager"
- class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory">
- <ref bean="sessionFactory"/>
- </property>
- </bean>
-
- <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
- <property name="transactionManager" ref="transactionManager"/>
- <property name="transactionAttributeSource">
- <value>
- com.skyon.user.manager.UserManager.*=PROPAGATION_REQUIRED
- #Add new defines here ->
- </value>
- </property>
- </bean>
-
- <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
- <property name="interceptorNames">
- <list>
- <value>transactionInterceptor</value>
-
-
-
- </list>
- </property>
- </bean>
-
- <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
- <property name="transactionInterceptor" ref="transactionInterceptor"/>
- </bean>
-
- </beans>
-
<script type="text/javascript">render_code();</script> 这里利用 DefaultAdvisorAutoProxyCreator 实现了对容器中所有 bean 的自动代理, 增加一个需要事务的业务 bean 时只要在 transactionInterceptor 增加一行即可, 增加别的 interceptor 也非常方便, 极大减少了配置量![](http://www.javaeye.com/images/forum/smiles/icon_smile.gif) |
完整版来叻!!
配置Spring,针对Service层的bean做事务处理,以往的做法是这样:
以后,如果增加新的Service/Manager,则XML配置的增量是这一段:
上面说的是老的做法,比较传统。缺点是增量比较大,配置起来copy&paste让人觉得不太爽,比较臃肿。
下面的是Feiing给出的更好的方案,我有一些修改:
以后每次的增量是这一段:
跟配置普通bean的方法一样,非常简洁、直观。
我把Feiing的transactionAttributesSource改成叻transactionAttributes,并且将DefaultAdvisorAutoProxyCreator改成了BeanNameAutoProxyCreator,我觉得毕竟不是context下的每个bean都需要事务,只要在Service层做AOP就可以叻。
和Robbin一致认为,Feiing的做法非常可取.