Spring中的事务处理(下)
上篇《Spring中的事务处理(上)》讲了Spring和JDBC管理事务的方式,也说了Spring支持的事务管理器的类型,这篇主要列举下当持久层为Hibernate时,Spring所支持的几种配置事务的方式,先说两种配置sessionFactory的方式。
第一种,为直接读取hibernate.cfg.xml文件获取连接数据库信息的方式,hibernate.cfg.xml配置如下:
在spring配置文件applicationContext-common.xml中的配置如下:当Hibernate中实体类的映射文件越来越多时,可以采用packagesToScan属性,扫描某一个包下所有符合条件的*.hbm.xml文件,免去了在hibernate.cfg.xml配置大量映射文件所带来的不便。第二种方式是直接在Spring配置文件applicationContext-common.xml中配置数据源,不再读取hibernate.cfg.xml,配置如下:
以上是两种配置HibernatesessionFactory的方式,可自由选择,下面是Spring针对Hibernate事务管理器的四种配置方法,比较推荐第一种和第二种方式。首先定义一个事务管理器:
一. 用<tx/>标签来定义事务方式,<aop/>标签来关联对应的方法上:在默认情况下,Spring采用JDK代理,如想用cgLib代理,需引入相应的Jar包,然后按照上面注释部分,将proxy-target-class属性设置为true,其余不变。二. 用代理的方式,这种也是较为常用的一种方式,下面为配置方式:
这种方式值得注意的地方是,必须要将注入的bean对象和事务代理对象关联起来,iUserDao为实际配置的bean对象。如下:三. 用拦截器的方式,这是一种较为古老的方式,配置方式如下:beanNames属性可以匹配所有符合条件的对象。四. 用注解的方式,这种方式一般不建议使用。需要配置的如下:
需要注意配置<context:annotation-config/>开启Annotation注解。下面是需要加入事务的类:事务是企业应用开发的重要组成部分,他使软件更加可靠。他们确保一种要么全有要么全无的行为,防止数据不一致而导致的不可预测的错误发生。他们同事也支持并发,防止并发应用线程在操作同一数据互相影响。