Spring AOP声明式事务

  • Spring AOP声明式事务
    • 传统spring配置
    • SpringBoot配置

Spring AOP声明式事务

Spring AOP声明式事务可以帮我们自动管理事务,在业务操作前后加入事务开始和提交,根据约定的命名规则,进行处理。哪些使用事务,哪些不使用事务,使我们专注于业务处理,提高我们开发效率。它是代理模式的设计思想。

使用aop编程,事务管理器真正在做事务做处理,用拦截器进行前后拦截执行事务,拦截哪些地方规则由连接点定义,切点是真正执行事务管理器的地方,通知是定义这整个的事务管理。

事务管理器
拦截器
连接点
切点
通知

传统spring配置

<!-- 配置事务管理器 -->
<bean name="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property>
</bean><!-- 注解方式配置事务 -->
<!-- <tx:annotation-driven transaction-manager="transactionManager" /> --><!-- 拦截器方式配置事务 -->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager"><tx:attributes><!-- 以如下关键字开头的方法使用事务 --><tx:method name="add*" /><tx:method name="save*" /><tx:method name="update*" /><tx:method name="modify*" /><tx:method name="edit*" /><tx:method name="delete*" /><tx:method name="remove*" /><tx:method name="repair" /><tx:method name="deleteAndRepair" /><!-- 以如下关键字开头的方法不使用事务 --><tx:method name="get*" propagation="SUPPORTS" /><tx:method name="find*" propagation="SUPPORTS" /><tx:method name="load*" propagation="SUPPORTS" /><tx:method name="search*" propagation="SUPPORTS" /><tx:method name="datagrid*" propagation="SUPPORTS" /><!-- 其他方法不使用事务 --><tx:method name="*" propagation="SUPPORTS" /></tx:attributes>
</tx:advice>
<!-- 切面,将事务用在哪些对象上 -->
<aop:config><!-- 切点 --><aop:pointcut id="transactionPointcut"expression="execution(* edu.gdst.scientific.service.*.*(..))" /><aop:advisor pointcut-ref="transactionPointcut"advice-ref="transactionAdvice" />
</aop:config>

SpringBoot配置

Aspect
@Configuration
public class TransactionAdviceConfig {//连接点private static final String AOP_POINTCUT_EXPRESSION = "execution (* com.***.service.*.*(..))";// 事务管理器@Autowiredprivate PlatformTransactionManager transactionManager;// 拦截器配置规则使用 事务(管理器)transactionManager@Beanpublic TransactionInterceptor txAdvice() {//默认的事务属性,使用事务txAttr_REQUIREDDefaultTransactionAttribute txAttr_REQUIRED = new DefaultTransactionAttribute();txAttr_REQUIRED.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);//默认的事务属性,不使用事务txAttr_REQUIRED_READONLY,只读DefaultTransactionAttribute txAttr_REQUIRED_READONLY = new DefaultTransactionAttribute();txAttr_REQUIRED_READONLY.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);txAttr_REQUIRED_READONLY.setReadOnly(true);NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource();//使用事务source.addTransactionalMethod("add*", txAttr_REQUIRED);source.addTransactionalMethod("save*", txAttr_REQUIRED);source.addTransactionalMethod("delete*", txAttr_REQUIRED);source.addTransactionalMethod("update*", txAttr_REQUIRED);source.addTransactionalMethod("exec*", txAttr_REQUIRED);source.addTransactionalMethod("set*", txAttr_REQUIRED);//只读不使用事务source.addTransactionalMethod("get*", txAttr_REQUIRED_READONLY);source.addTransactionalMethod("query*", txAttr_REQUIRED_READONLY);source.addTransactionalMethod("find*", txAttr_REQUIRED_READONLY);source.addTransactionalMethod("list*", txAttr_REQUIRED_READONLY);source.addTransactionalMethod("count*", txAttr_REQUIRED_READONLY);source.addTransactionalMethod("is*", txAttr_REQUIRED_READONLY);//其它只读,不使用事务source.addTransactionalMethod("*", txAttr_REQUIRED_READONLY);//根据上面的规则,使用事务管理器return new TransactionInterceptor(transactionManager, source);}//通知,使用上面的拦截器,根据AOP_POINTCUT_EXPRESSION连接点(规则)注入事务代码(事务管理器)@Beanpublic Advisor txAdviceAdvisor() {//切点AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();//设置规则,即连接点AOP_POINTCUT_EXPRESSIONpointcut.setExpression(AOP_POINTCUT_EXPRESSION);//定义通知,前后开启事务处理return new DefaultPointcutAdvisor(pointcut, txAdvice());}
}

Spring AOP声明式事务相关推荐

  1. spring aop 声明式事务管理

    http://www.cnblogs.com/wangkaipeng/p/5782116.html

  2. 【SSM框架系列】Spring - JdbcTemplate声明式事务

    JdbcTemplate概述 以往使用jdbc时,每次都需要自己获取PreparedStatement,执行sql语句,关闭连接等操作.操作麻烦冗余,影响编码的效率. Spring把对数据库的操作在j ...

  3. spring配置c3p0连接池、spring的声明式事务管理

    一.spring配置c3p0连接池: 1.导入maven依赖: <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> & ...

  4. Spring框架声明式事务管理

    Spring框架声明式事务管理 底层就是AOP原理,面向切面编程 在不修改源码的情况下,对方法进行增强 Spring框架事务管理相关类和API PlatformTransactionManager 平 ...

  5. 保护亿万数据安全,Spring有“声明式事务”绝招

    摘要:点外卖时,你只需考虑如何拼单:选择出行时,你只用想好目的地:手机支付时,你只需要保证余额充足.但你不知道这些智能的背后,是数以亿计的强大数据的支持,这就是数据库的力量.那么庞大数据的背后一定会牵 ...

  6. ❤️Spring的声明式事务

    ❤️Spring的声明式事务 事务在项目开发过程非常重要,涉及到数据的一致性的问题,不容马虎! 事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性. 事务就是把一系列的动作当成一个独 ...

  7. 06_02_任务三:Spring JDBCTemplate 声明式事务

    任务三:Spring JDBCTemplate & 声明式事务 课程任务主要内容: Spring的JdbcTemplate Spring的事务 Spring集成web环境 一 Spring的J ...

  8. Spring的声明式事务底层原理

    文章目录 声明式事务的概述 声明式事务的初探 声明式事务的源码分析 声明式事务的概述 Spring 的声明式事务管理在底层是建立在 AOP 的基础之上的.其本质是对方法前后进行拦截,然后在目标方法开始 ...

  9. Spring系列--声明式事务管理

    Spring事务管理概述 Spring的事务管理简化了传统的事务管理流程,并且在一定程序上减少了开发者的工作量. 事务管理的核心接口 在Spring的所有JAR包中包含一个名为Spring-tx-5. ...

最新文章

  1. openssl——初了解
  2. orb_slam编译的 问题
  3. Idea左侧显示目录结构和.java文件的解决办法
  4. c++ cdi+示例_C ++“和”关键字示例
  5. java进程内存一直没释放_五分钟彻底搞懂你一直没明白的Linux内存管理
  6. 安卓应用用户数据_用户指标数据应用
  7. BZOJ2440 [中山市选2011]完全平方数
  8. Django信号量实现用户密码修改
  9. Populating Additional data in Material master record
  10. Pytorch专题实战——逻辑回归(Logistic Regression)
  11. STM32控制WS2812B HAL库
  12. 量子统计巨正则系综应用理想费米气体与波色气体性质详解
  13. 桌面计算机怎么设置时钟同步,电脑进入屏保后怎么设定让时间显示在萤幕上
  14. Python&Opencv手势识别系统(完整源码&自定义UI操作界面&视频教程)
  15. Redis布隆过滤器和布谷鸟过滤器
  16. 最佳的远程桌面连接工具
  17. MacBookPro 装win7
  18. 微信电脑端【多开问题】+附赠,解决桌面图标变小白块问题
  19. Excel数据分析入门-数据图表
  20. 计算机采用什么交换技术,计算机 交换技术是什么?

热门文章

  1. java serializable用法_Serializable序列化用法
  2. 自定义相机及视频录制界面
  3. 误删图片怎么恢复?这个方法还有人不知道?
  4. 靠谱的pyCharm最新2018激活码
  5. van-image移动端点击图片预览
  6. 用计算机上的窗口造句,窗口造句简单
  7. C语言各种排序方法总结。
  8. linux 备份文件时,目录下的个别文件不备份,【学习笔记】Linux TAR备份文件时排除指定文件...
  9. iClient for Leaflet通过点击实现切换地图中心点定位
  10. 给刚毕业或培训机构出来人的建议