【SSM面向CRUD编程专栏 7】springAop 事务控制

🛫更多ssm知识见SSM_面向CRUD编程专栏

🚕本博客总结自黑马程序员的ssm框架视频

🚒博主对于该知识尚在学习阶段

🚄如果发现存在问题请毫不吝啬的指出

🚀🚀扎哇太枣糕的博客主页🚀🚀

目录

1 Spring AOP

2 使用AOP开发

3 spring的事务控制


1 Spring AOP

        AOP(Aspect Oriented Programming)意思是面向切面编程,是通过预编译的方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP(面向对象编程)的延续,是函数式编程的一种衍生范型,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑个部分之间的耦合性降低,提高程序的可重用性,同时提高了开发的效率。

        AOP可以在程序运行期间,在不修改源码的情况下对方法进行功能的增强。它的优势就是可以减少重复代码,提高开发效率,并且便于维护。

底层实现

        AOP的底层通过Spring提供的动态代理技术实现,在运行期间,Spring通过动态代理技术动态的生成代理对象,代理对象方法执行时进行增强功能的介入,再去调用目标对象的方法,从而完成功能的增强。

相关名词概念

  • Target(目标对象):也就是被代理类对象
  • Proxy(代理):一个类被AOP增强后return的对象就是代理类对象
  • JoinPoint(连接点):每个被拦截到的方法就是一个连接点,这里点指的是方法,因为spring只支持方法类型的连接点
  • Pointcut(切入点):需要被增强的每个方法就是一个切入点
  • Advice(增强):用于定义功能增强方法
  • Aspect(切面):切入点加增强就是切面
  • Weaving(织入):将切入点的方法进行增强的过程就被称为织入,spring采用动态代理织入,而AspectJ采用编译器织入和类装载期织入。

常用的两种动态代理技术

  • JDK代理:基于接口的动态代理技术,有接口时使用
  • cglib代理:基于父类的动态代理技术,无接口时使用

JDK代理

第一步:创建一个公共接口

 第二步:创建一个被代理类实现公共接口

 第三步:创建一个功能增强类

 第四步:测试类,利用反射创建代理类调用增强方法

测试结果:

cglib代理

第一步:导入相应的依赖jar包

        由下图可知,cglib的包已经被封装到spring-core中它又被封装在spring-context中,故只需要导入spring-context的依赖就可以使用cglib

 第二步:创建一个被代理类

第三步:创建一个功能增强类

第四步:测试类,利用反射创建代理类调用增强方法

 测试结果:

2 使用AOP开发

        AOP开发需要编写目标类的目标方法、编写切面类内置功能增强方法、配置配置文件将切入点与增强方法相结合。spring框架会监控切入点方法的执行,一旦监控到切入点方法执行就会动态的使用代理机制创建代理类对象,并在相应位置将增强与切入点进行织入。spring框架会根据目标类是否实现了接口来决定使用JDK和cglib中的哪一种动态代理模式

基于xml的AOP开发

第一步:导入相关依赖

 第二步:创建一个公共接口和目标类

 第三步:创建一个切面类内置增强方法

第四步:配置配置文件(创建对象的bean标签、配置织入关系)

测试类及结果:

     

  通知类型

   

⚠   切点表达式的写法:

🔴访问修饰符可以省略不写🔴返回值类型、方法全限名里的具体项可以使用*代表任意🔴包名与类名之间一个点.代表当前包下的类,两个点..代表当前包及其子包下的类🔴参数可以使用两个点..代表任意(任意个数、任意类型)

举例如下:对照上述要求理解记忆

⚠  切点表达式的抽取  

  

⚠  环绕式增强方法

    

    

基于注解的AOP开发

第一步:导入相关依赖

第二步:创建一个公共接口和目标类

第三步:创建一个切面类内置增强方法

第四步:配置配置文件(开启组件扫描、AOP自动代理)

 测试类:

3 spring的事务控制

编程式事务控制三个对象

🔴平台事务管理器对象

        PlatformTransactionManager接口是spring的事务管理器,他里面提供了我们常用的操作事务的方法。

🔴事务定义对象

        TransactionDefinition内部封装控制事务的一些参数事务隔离级别

        事务隔离性控制不好的情况下,会产生以下三个问题:脏读、不可重复度、幻读

一共有以下五种事务隔离级别

  • ISOLATION_DEFAULT:默认
  • ISOLATION_READ_UNCOMMITTED:读未提交
  • ISOLATION_READ_COMMITTED:读已提交(解决脏读)
  • ISOLATION_REPEATABLE_READ:可重复读(解决不可重复读)
  • ISOLATION_SERIALIZABLE:串行化(解决三种问题,但是效率极低相当于锁表)

 事务传播行为

         一个事务方法调用另一个事务是会具有事务传播行为

🔴事务状态对象 

        TransactionStatus接口提供的是事务具体的运行状态

声明式事务控制

        spring的声明事务控制就是采用生命的方式处理事务,这里说的声明就是指在配置文件中声明,用在spring配置文件中声明处理事物的方式代替代码式的处理事务。声明式事务控制可以将业务逻辑和事务管理相分离开,这样在不需要事务管理的时候,只要在设定文件上修改即可移除事务管理服务,无需改变代码方便维护。Spring声明式事务控制的底层就是AOP

基于xml的声明式事务控制

dao层:定义转入转出方法

 service层:实现转入转出的业务逻辑

 controller层:调用service层的方法进行事务操作

        如果xml文件中不进行aop织入进行事务增强的话,除数为零异常的抛出就会导致tom转出500而lucy并没有转入500,接下来进行事务控制配置

这样的话就会在抛异常的同时两人的账户余额都不会改变 

基于注解的声明式事务控制

使用@Repository注解和@Service注解代替AccountDaoImpl和AccountServiceImpl的bean标签,使用@Transactional注解代替aop织入和事务增强设置

 

                                                                                                                                                           

上一篇:【SSM面向CRUD编程专栏 6】springMVC拦截器、异常处理 jdbcTemplate

下一篇:【SSM面向CRUD编程专栏 8】一篇博客快速上手使用MyBatis进行CRUD
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SSM面向CRUD编程专栏 8】一篇博客快速上手使用MyBatis进行CRUD

🛫更多ssm知识见SSM_面向CRUD编程专栏 🚕本博客总结自黑马程序员的ssm框架视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 目…

【SSM面向CRUD编程专栏 9】SSM框架整合

🛫更多ssm知识见SSM_面向CRUD编程专栏 🚕本博客总结自黑马程序员的ssm框架视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 目…

三万字速通SSM框架入门知识点,快速上手CRUD

🛫更多ssm知识见SSM_面向CRUD编程专栏 🚕本博客总结自黑马程序员的ssm框架视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 目…

无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

问题简介 本人是在进行一个ssm框架项目的编写的时候,在数据库中查询到所有的商品信息并返回到页面使用EL表达式进行展现,但是使用tomcat 9.0.58运行的时候报错会出现以下报错情况。 页面报错: 控制台报错: 解决方法 首先看看是不…

check the manual that corresponds to your MySQL server version for the right syntax to use near

首先判断自己是在什么情况下报的错,如果是MyBatis的SQL报错的话,建议直接点击目录跳转到MyBatis时SQL报错,避免浪费时间。如果本文能够对你有所帮助的话,还请在评论区多多支持 目录 🍻运行SQL语句、SQL文件等报错 &…

MyBatis的逆向工程工具,自动生成数据库对应的POJO实体类、mapper接口、增删改查mapper.xml文件

下载MyBatis的逆向工程工具,并解压缩到一个不包含中文字符的文件夹下,我直接放到了D盘下,下载地址:MyBatis逆向工程工具下载 如何使用MyBatis的逆向工程工具 下载之后使用idea在一个新窗口中打开,选中工具文件之后&am…

『收藏向 期末SSM课设救急』 教你从搭建到测试运行手撸一个SSM项目实战,附带源码,前端页面、解析和一般遇到的问题(排雷)

🛫ssm知识学习见SSM_面向CRUD编程专栏 🚕本项目来自动力节点的【米米商城】 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 项目…

【SpringBoot 2】(一)基础知识了解学习

🛫更多知识总结见SpringBoot 2专栏 🚕本篇知识点总结自尚硅谷雷神的视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 ​ 目录…

【SpringBoot 2】(二)快速入门案例HelloWorld

🛫更多知识总结见SpringBoot 2专栏 ( 🚕本篇知识点总结自尚硅谷雷神的视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 ​ 目…

【SpringBoot 2】(三)SpringBoot相较于Spring的特点

🛫更多知识总结见SpringBoot 2专栏 🚕本篇知识点总结自尚硅谷雷神的视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 ​ 目录…

井通swtc能不能涨到2元_买一支2块到3块之间的股票,买几十万股吗?这样操作效果怎么样?...

有很多新股民有一种看法,认为高价股风险很大,那么可不可以买2到3元的低价股,是不是风险就很小,以后上涨的力度就会很大?这是很多股民都存在的一个误区,也是很多股市的所谓高手的误导,他们说&…

cad应用程序的组件中发生了未经处理的异常_什么是CAD/CAM?

与许多其他行业一样,牙科技术的生产阶段也越来越自动化。由于牙科实验室工作的价格已成为治疗计划和治疗的主要因素,因此自动化可以在西欧和美国等高薪地区实现更具竞争力的生产。现在,计算机技术的进步使高性价比的单件生产成为可能。近年来…

【SpringBoot 2】(四)详析SpringBoot的常用注解

🛫更多知识总结见SpringBoot 2专栏 🚕本篇知识点总结自尚硅谷雷神的视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客首页🚀🚀 目录 向…

苹果7手机严重卡顿_苹果手机仅配备4GB运存都不会卡顿,安卓系统为何要更多内存?...

原标题:苹果手机仅配备4GB运存都不会卡顿,安卓系统为何要更多内存?众所周知,安卓系统历经十余年的发展,目前最低的运行需求是8GB内存,如果是旗舰机的话还要标配12GB或更高。但是前几天刚发布的iPhone12&…

IntelliJ IDEA自动生成自定义的类注释和方法注释

目录 自定义的类注释 自定义方法注释 实现效果:不用手写即可自动生成如下图的类上注释和方法上的注释,我们只需要填写方法注释的参数和返回值文字描述即可,大大节省了代码开发的时间提高代码开发效率。 🌕 自定义的类注释 Fil…

violinplot如何看懂_一张图告诉你如何看懂个股大趋势

昨日在T0交易利好消息的影响下,券商股全线大幅高开,带动三大指数高开走高,科技题材股全线活跃,两市量能明显放大,形成量价齐升的良性态势,上证冲上2917,收在2915,创业板大涨3%以上&a…

jz指令是什么意思_S7-200 SMART 运动控制指令详解-电气阿伟带小白启程

大家好,我是工控阿伟,今天又跟大家见面了。学习需要坚持,需要钻研,做技术亦是如此,厚积才能博发。阿伟写程序都是自己测试使用过的,需要的可以借鉴,避免走弯路。S7-200 smart 运动控制指令由编程…

【SpringBoot 2】(五)自动配置简析源码 开发中小技巧

写在前面🛫更多知识总结见SpringBoot 2专栏 🚕本篇知识点总结自尚硅谷雷神的视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客首页🚀🚀…

jar包导出无法显示图片或者音乐_如何制作图片视频短片,配上音乐闪耀朋友圈!...

把图片制作成视频短片,再配上一首好听的音乐,发到朋友圈,不仅可以更具创意的分享自己的生活点滴,更能因您的创意获得一大票的赞哦!看到别人分享自己制作的图片视频短片,是不是心痒痒也想做一个呢&#xff1…

【SpringBoot 2】(六)配置文件 web开发相关

写在前面🛫更多知识总结见SpringBoot 2专栏 🚕本篇知识点总结自尚硅谷雷神的视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客首页🚀🚀…