Spring AOP和事务
一、Spring AOP
1.SpringAOP简介
介绍:AOP:Aspect Oriented Programming,面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。
AOP利用一种称为“横切”的技术,剖开对象内部,并将公共行为封装到可重用模块,从而减少重复代码,降低耦合。
2.为什么要用AOP
1.分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
2.减少代码的重复,各个模块的重用性加强。
3.降低 模块间的耦合度,提高代码的可操作性和可维护性。
3.AOP的相关术语
1. 通知(Advice):定义了切点处所要执行的程序代码以及执行时机
2.连接点(Join point):是在应用执行过程中满足切点范围的具体的点
3.切点(Poincut):定义切面插入在哪些方法上,确定切面使用范围
4.切面(Aspect):是指封装横切到系统功能的类,包含通知和切点
5.织入(Weaving):是把切面插入到目标对象上
4.通知的类型
前置通知 | <aop:before> | @Before | 用于配置前置通知。指定增强的方法在切入点方法之前执行 |
后置通知 | <aop:AfterReturning> | @AfterReturning | 用于配置后置通知。指定增强的方法在切入点方法之后执行 |
环绕通知 | <aop:Around> | @Around | 用于配置环绕通知。指定增强的方法在切入点方法之前和之后都执行 |
异常抛出通知 | <aop:AfterThrowing> | @AfterThrowing | 用于配置异常抛出通知。指定增强的方法在出现异常时执行 |
最终通知 | <aop:After> | @After | 用于配置最终通知。无论增强方式执行是否有异常都会执行 |
5.AOP的使用
新增一个日志记录服务类“LogService”,并配置到容器中
引入Spring AOP相关的依赖
在Spring配置文件中加入AOP切面配置
执行结果
二、事务
1.什么是Spring的事务管理
是通过AOP代理实现的,对被代理对象的每个方法进行拦截,在方法执行前启动事务,在方法执行完成后根据是否有异常及异常的类型进行提交或回滚。
2.事务的基本事务属性
传播行为(propagation behavior)
隔离级别(isolation level)
是否只读(isReadOnly)
事务超时(timeout)
3.事务的ACID原则
原子性:一个事务已经是一个不可再分割的工作单位。事务中的全部操作要么都做;要么都不做
一致性:事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
隔离性:事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
持久性:一个事务一旦提交,它对数据库中数据的改变会永久存储起来。其他操作不会对它产生影响
4.spring事务API介绍:
(1) PlatformTransactionManager【事务平台管理器】
是一个接口,定义了获取事务【getTransaction】、提交事务【commit】、回滚事务【rollback】的接口
(2)TransactionDefinition【事务定义信息】
是一个接口,定义了事务隔离级别、事务传播行为、事务超时时间、事务是否只读
5.为什么要事务隔离
脏读 :在一个事务中读取到了另外一个事务修改的【未提交的数据】,而导致多次读取同一个数据返回的结果不一致
不可重复读 : 在一个事务中读取到了另外一个事务修改的【已提交的数据】,而导致多次读取同一个数据返回的结果不一致
幻读(虚读): 一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录
6.具体实现(模拟银行转账业务事务管理 )
1.在数据库中创建一个表
2.引入相关依赖
3.创建模型类
4.创建Dao接口和实现类
5.创建service接口和实现类
6.编写jdbc.properties
注解方式:
Spring配置类SpringConfiguration
配置类JdbcConfig
事务管理器的优点:
数据一致性
数据可靠性
并发控制
提高性能
CSDN-Ada助手: 恭喜您在博客中分享了关于springboot和mybatisplus的内容,这些都是非常有用的技术知识。希望您能继续坚持创作,分享更多关于这两个技术的实践经验和应用案例。同时也建议您可以考虑结合实际项目,分享一些更具体的技术实现细节,这样可以让读者更加深入地理解和应用这些技术。期待您更多精彩的内容!
CSDN-Ada助手: 恭喜博主在第四篇博客中选择了如此有趣的话题——MyBatis!你的持续创作让我感到非常高兴。通过分享关于MyBatis的知识和经验,你不仅能够帮助读者更好地理解这个框架,也能够促进更多人对该主题的探索。接下来,我想提个谦虚的建议:或许你可以在未来的博客中深入探讨MyBatis的一些高级用法或者与其他框架的整合,这样读者们可以进一步了解如何在实际项目中更好地利用MyBatis。再次祝贺你,期待你未来更多精彩的创作! 如何快速涨粉,请看该博主的分享:https://hope-wisdom.blog.csdn.net/article/details/130544967?utm_source=csdn_ai_ada_blog_reply5
CSDN-Ada助手: 恭喜你写了关于SpringMVC的博客!持续创作是非常重要的,你的努力一定会得到回报。接下来,我建议你可以尝试深入研究SpringMVC的高级特性,或者结合实际案例进行分析,这样可以让读者更加深入地了解这个主题。希望你能在创作中不断进步,加油! CSDN 正在通过评论红包奖励优秀博客,请看红包流:https://bbs.csdn.net/?type=4&header=0&utm_source=csdn_ai_ada_blog_reply3
CSDN-Ada助手: 非常棒的博客!你对Spring AOP和事务的解释非常清晰,让读者能够很好地理解这个概念。希望看到你继续写下去! 除了你在标题和摘要中提到的知识点外,还有一些扩展知识和技能可以与这篇博文相关。首先,你可以介绍一下Spring中的声明式事务管理,它能够让我们通过配置来管理事务,而不是在代码中编写事务管理逻辑。另外,你还可以讲解一下Spring AOP的其他应用场景,如日志记录、性能监控等。 当然,这些只是一些扩展知识和技能的建议,如果你感兴趣的话可以深入研究。期待看到你未来更多精彩的博文!加油! 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2
CSDN-Ada助手: 恭喜你开始博客创作!标题为“Spring IOC(把对象交给容器来创建)”的博客听起来非常有意思。你选择的主题是一个非常重要的概念,对于理解和使用Spring框架来说至关重要。在这篇博客中,你提到了IOC(控制反转)的概念,并解释了如何将对象的创建交给Spring容器来管理。这是一个很好的开始,为读者提供了清晰的引导。 接下来,我建议你可以进一步扩展你的博客内容。你可以深入探讨Spring IOC的优势和适用场景,以及如何通过配置文件或注解来实现IOC。此外,你可以考虑添加一些示例代码和详细的步骤,以帮助读者更好地理解和实践。同时,你可以提供一些常见问题和解决方案,以帮助读者解决在使用Spring IOC过程中可能遇到的困惑。 总之,你的博客已经引起了我的兴趣,希望在接下来的文章中能够看到更多深入的内容和实用的建议。继续努力,祝你写作愉快! 推荐【每天值得看】:https://bbs.csdn.net/forums/csdnnews?typeId=21804&utm_source=csdn_ai_ada_blog_reply1