代码下载地址:http://www.zuidaima.com/share/1828220435860480.htm
原文:Spring事务Transaction配置的五种注入方式详解
前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识。通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的。
总结如下:
Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。
DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问时,DataSource实际为SessionFactory,TransactionManager的实现为HibernateTransactionManager。
具体如下图:
根据代理机制的不同,总结了五种Spring事务的配置方式,配置文件如下:
第一种方式:每个Bean都有一个代理
第二种方式:所有Bean共享一个代理基类
第三种方式:使用拦截器
第四种方式:使用tx标签配置的拦截器
第五种方式:全注解
<?xml version= "1.0" encoding= "UTF-8" ?> |
02 | <beans xmlns= "http://www.springframework.org/schema/beans" |
03 | xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" |
04 | xmlns:context= "http://www.springframework.org/schema/context" |
05 | xmlns:aop= "http://www.springframework.org/schema/aop" |
06 | xmlns:tx= "http://www.springframework.org/schema/tx" |
07 | xsi:schemaLocation="http: //www.springframework.org/schema/beans |
08 | http: //www.springframework.org/schema/beans/spring-beans-2.5.xsd |
09 | http: //www.springframework.org/schema/context |
10 | http: //www.springframework.org/schema/context/spring-context-2.5.xsd |
11 | http: //www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd |
12 | http: //www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> |
13 |
14 | <context:annotation-config /> |
15 | <context:component-scan base- package = "com.bluesky" /> |
16 |
17 | <tx:annotation-driven transaction-manager= "transactionManager" /> |
18 |
19 | <bean id= "sessionFactory" |
20 | class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" > |
21 | <property name= "configLocation" value= "classpath:hibernate.cfg.xml" /> |
22 | <property name= "configurationClass" value= "org.hibernate.cfg.AnnotationConfiguration" /> |
23 | </bean> |
24 |
25 | <!-- 定义事务管理器(声明式的事务) --> |
26 | <bean id= "transactionManager" |
27 | class = "org.springframework.orm.hibernate3.HibernateTransactionManager" > |
28 | <property name= "sessionFactory" ref= "sessionFactory" /> |
29 | </bean> |
30 | |
31 | </beans> |
此时在DAO上需加上@Transactional注解,如下:
01 | package com.bluesky.spring.dao; |
02 |
03 | import java.util.List; |
04 |
05 | import org.hibernate.SessionFactory; |
06 | import org.springframework.beans.factory.annotation.Autowired; |
07 | import org.springframework.orm.hibernate3.support.HibernateDaoSupport; |
08 | import org.springframework.stereotype.Component; |
09 |
10 | import com.bluesky.spring.domain.User; |
11 |
12 | @Transactional |
13 | @Component ( " userDao " ) |
14 | public class UserDaoImpl extends HibernateDaoSupport implements UserDao { |
15 |
16 | public List <User> listUsers() { |
17 | return this .getSession().createQuery( " from User " ).list(); |
18 | } |
19 | } |