【Spring】【AOP】【事务的切入】
2017-12-31 19:38
337 查看
简介
事务应该在service层启动,但数据库的操作是在dao层.
事务开关的方式
不同的dao层,开启事务的方式不一样,Spring给了不同的事务管理员.
JDBC的事务管理员:DataSourceTransactionManager
- Connection对象.setAutoCommit(false) 获取事务
- Connection对象.commit(); 提交事务
- Connection对象.rollback(); 事务回滚
Hibernate的事务管理员:HibernateTransactionManager
- Session对象.beginTransaction(); 开启事务并返回事务对象
- tx.commit() ;
- tx.rollback() ;
JPA的事务管理员:JpaTransactionManager
- entityManager.beginTransaction();
- tx.commit();
- tx.rollback() ;
事务AOP
声明事务管理员的bean;JDBC需要添加 连接池的bean对象
Hibernate需要添加sessionFactory的bean对象
声明事务的通知
<tx:method>
name=”方法名”
read-only=”是否只读” get,list等方法都说只读
rollback-for=”需要回滚异常” 默认为RuntimeException
propagation=”事务传播方式”;默认为REQUIRED
REQUIRED:业务方法如果处于事务中,不再新建事务
NOT_SUPPORTED:业务方法中,出现DDL语句,本应该提交事务,此时却挂起事务,DDL后在继续事务.
REQUIRES_NEW:每个业务方法都会新建事务,之前的业务方法被挂起
声明切点并织入切面
<!-- 事务管理员 --> <bean id="txManager" class="HibernateTransactionManager的全限名"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 事务的通知 --> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="get*" read-only="true"/> <tx:method name="list*" read-only="true"/> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <!-- 织入切面 --> <aop:config> <aop:pointcut expression="execution(* *..*DAO*.*(..))" id="pc"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/> </aop:config>
相关文章推荐
- Spring 配置 ——事务:aop:config切入
- Spring 配置 ——事务:aop:config切入
- Spring 配置 ——事务:aop:config切入
- spring----AOP注解以及spring的JSBC和事务
- spring aop与事务配置
- Spring事务管理—aop:pointcut expression解析
- spring----AOP注解以及spring的JDBC和事务
- 用SpringAOP方式配置数据库事务管理
- spring对事务的控制 AOP
- 数据库事务的四大特性、隔离级别以及Spring中如何利用AOP进行事务管理
- Spring Mvc那点事---(33)Spring事务基于AOP实现
- Spring中事务与aop的先后顺序问题(注解形式)
- SpringBoot系列(五)SpringBoot 之Spring 事务管理 和 切面 AOP
- spring AOP 配置事务不起作用的问题(用Junit测试service)
- 在Spring中采用声明式方法对Hibernate和JDBC进行统一的事务配置(AOP)
- Spring 管理hibernate中的事务1(手动开关事务,Aop拦截)
- 【转】Spring中事务与aop的先后顺序问题
- spring配置hibernate事务aop不生效的问题
- spring aop事务通知(切面异常处理)
- 杨老师课堂之springAOP事务控制源码解析