当前位置: 首页 > news >正文

String AOP、事务、缓存

Spring AOP

Spring AOP,面向切面编程 Aspect Orinted Programming

传统:纵向编程(垂直编程)

也就是写代码从上往下写的:

在这里插入图片描述

切面:横向编程,批量操作。

指的是目前有三个类,想统计一下这三个类中的代码一共执行了多少时间 。如果单独计算,再求和,可以统计出来,但是如果项目有很多个类,那么需要写很多次,比较麻烦,而且会出现代码侵入问题 ,这是不良好的实现。

在这里插入图片描述
所以出现了面向切面编程:(都是横向切入的批量操作

在任意位置同时横向(水平)切入一些代码 ,不需要的时候随时能去掉这部分代码。在业务类中看不在,是在别的地方写的。切向编程使用的原理:动态代理。

那什么是代理呢?

基于代理模式(对目标业务进行改变或增强)。代理(替代另外一个“人/业务”的工作,代理过程中对目标业务进行改变或者增强,但是对外提供的接口不变,对外用户无感知):分为静态代理和动态代理

怎么理解代理 ?

代理的理解 :比如用户去火车站/高铁站买票,用户可以去火车站线下售票点买票,也可以线上买票,用户最终拿到的都是票,对用户的结果是 一样的。但是其实火车站线下售票处可能对售票做了增强,比如出票速度可能更快,或者票价更贵 ,这就是代理模式。

代理模式:

分为静态代理和动态代理。

一、静态代理。(用的很少 )

静态代理就是在程序编译运行之前 ,代理业务就已经创立确定,可以预测了

  1. 手动编码。
  2. 使用jaspect注解自动生成。

二、动态代理

动态代理就是必须在程序跑起来之后,在内存中创建的代理。是在程序运行期间创建的。

动态代理是在程序运行期间,创建目标类的代理实例。

  1. JDK动态代理:无需引入第三方库,jdk默认支持。要求:代理类必须实现接口。

  2. Cglib动态代理:原理基于继承。要求目标类以及目标方法不能是final的。

AOP和Spring AOP总结

AOP:面向切面编程,主要通过代理模式来实现。切字段,切方法,切一切。

Spring AOP:仅限对方法进行切面,在方法的前,后,或者前后切入代码。
1.引入aop依赖。
2.定义切面类,切入点和通知(Advice)

事务处理与Spring缓存(基于Spring aop)

事务:数据库的概念。一个sql批量执行的不可分割的整体,要么同时执行成功,同时失败。
ACID:
一。原子性。二、一致性、三、隔离性、四、持久性。 原一隔持。

Connection conn = DrvierManager.getConnection()
conn.setAutoCommit(false); //设置不自动提交try {....conn.commit();//手动提交
} catch(Exception e) {conn.rollback();//回滚
}

事务:
1.引入spring-boot-starter-aop依赖。
2.在主启动类,或配置类上添加@EnableTransactionManagement注解。
3.在要开启事务的方法上添加@Transcational注解。

isolation:事务隔离级别,取决于数据库的支持。
1.读未提交:脏读。
2.读已提交:不可重复读。
3.可重复读:幻读。
4.串行化:排队执行。

从下往下,安全性递增,性能递减。

冒泡(传播)机制:和数据库无关,是spring有关。

其他详细介绍

http://www.lryc.cn/news/615873.html

相关文章:

  • Fish shell的abbr命令行参数介绍和Bat文件查看工具
  • Android 四大布局:使用方式与性能优化原理
  • Qt中的设计模式:经典的MVC,MVP和MVVM
  • 北京JAVA基础面试30天打卡06
  • 【webPack|Vite】了解常用配置,主要差异
  • 腾讯云EdgeOne Pages深度使用指南
  • 【后端】Java 8 特性 Optional 可选类 介绍
  • 7.企业级AD活动目录的备份与恢复策略
  • Celery分布式任务队列
  • opencv:图像轮廓检测与轮廓近似(附代码)
  • GoBy 工具联动 | GoBy AWVS 自动化漏扫工作流
  • 【15】OpenCV C++实战篇——fitEllipse椭圆拟合、 Ellipse()画椭圆
  • ubuntu超简单自动化Vim配置
  • (一)Tailwindcss
  • 从色彩心理学看嵌入式设备UI设计:原则、挑战与实践
  • Kafka 生产者与消费者分区策略全解析:从原理到实践
  • 阿里云ECS云服务器临时升级带宽方法
  • CentOS7挂载NTFS格式U盘
  • 安卓开发:组件化、模块化、插件化方案对比总结
  • ES 调优帖:Gateway 批量写入性能优化实践
  • Linux 系统中,如何处理信号以避免竞态条件并确保程序稳定性?
  • doubletrouble靶机
  • MVCC和日志
  • Spring Boot整合knife4j实战
  • Mysql笔记-存储过程与存储函数
  • 【C#补全计划】万类之父中的方法
  • 前端开发的奇技淫巧 --- 持续更新中
  • 【Canvas与戳记】黑底金Z字
  • LwIP的内存管理(1)
  • 如何调节天线结构使得两个模式的相位差为90°?如何实现左旋圆极化或右旋圆极化?