锁定老帖子 主题:Spring 事务配置的几种方式及应用举例
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-24
我以前在项目中的实践选择过程,最终选择第三种方案,几种都写出来与大家分享。 大家有其他好的方式,也欢迎分享。 <!-- 前面的 dataSource等配置略 ........ --> <!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref local="dataSource" /> </property> </bean> <!-- 事务模板 --> <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> <property name="transactionManager" ref="transactionManager" /> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> <!-- 本文仅简单用一种方式说明。所有方法起事务,可以修改以精细和区别性控制事务 --> </props> </property> </bean> <!-- 业务对象 --> <bean id="authService" parent="baseTransactionProxy"> <property name="target"> <bean class="com.xxxx.cms.service.AuthorityService"> <property name="authDao" ref="authDao" /> </bean> </property> </bean> <bean id="departmentService" parent="baseTransactionProxy"> <property name="target"> <bean class="com.xxxx.cms.service.pojo.DepartmentService"> <property name="departmentDao" ref="departmentDao" /> </bean> </property> </bean> <!-- 数据访问对象 --> <bean id="authDao" class="com.xxxx.cms.dao.jdbc.AuthorityDao"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="departmentDao" class="com.xxxx.cms.dao.jdbc.DepartmentDao"> <property name="dataSource" ref="dataSource" /> </bean>
AuthService authService = (AuthService) context.getBean("authService"); boolean b = authService.hasPermission("TOKEN_XXXXX"); <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- 事务管理拦截器 --> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager"> <ref local="transactionManager"/> </property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> <!-- 本文仅简单用一种方式说明。所有方法起事务,还可以精细控制事务 --> </props> </property> </bean> <!-- 配置要拦截哪些方法 --> <bean id="trasactionMethodPointcutAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> <property name="mappedNames"> <list> <value>*</value> <!-- 所有方法 --> </list> </property> <property name="advice"> <ref local="transactionInterceptor" /> </property> </bean> <!-- 配置要拦截哪些类,并使用那些拦截器 --> <bean id="ServiceAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="proxyTargetClass" value="true"></property> <property name="beanNames"> <list> <value>*Service</value> </list> </property> <property name="interceptorNames"> <list> <!-- 头三个是我们项目中用的其他 Advisor,这里展示了添加拦截器进行aspect控制的灵活性。省略他们的配置 --> <value>monitorMethodPointcutAdvisor</value> <value>asynmonitorMethodPointcutAdvisor</value> <value>businessLogMethodPointcutAdvisor</value> <value>trasactionMethodPointcutAdvisor</value> <!-- 事务拦截器, 直接配成 transactionInterceptor 去掉 trasactionMethodPointcutAdvisor bean 也可以, --> </list> </property> </bean> <!-- 业务对象 --> <bean class="com.xxxx.cms.service.AuthorityService"> <property name="authDao" ref="authDao" /> </bean> <bean class="com.xxxx.cms.service.pojo.DepartmentService"> <property name="departmentDao" ref="departmentDao" /> </bean> <!-- 数据访问对象 --> <bean id="authDao" class="com.xxxx.cms.dao.jdbc.AuthorityDao"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="departmentDao" class="com.xxxx.cms.dao.jdbc.DepartmentDao"> <property name="dataSource" ref="dataSource" /> </bean>
AuthService authService = (AuthService)ServiceFactory.createBean(AuthService.class); boolean b = authService.hasPermission("TOKEN_XXXXX"); @Transactional public class PersonServiceImpl implements PersonService { private EntityManager em; @PersistenceContext public void setEntityManager(EntityManager em) { this.em = em; }
<property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> <!-- 所有方法起事务,还可以精细控制事务 --> </props> </property>
1.5下Spring还用哪种更简化的事务管理方式,鄙人不是太熟,欢迎大家分享。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 4316 次