当前位置: 首页 > 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.xdnf.cn/news/1274167.html

相关文章:

  • Java数据结构——LinkedList
  • Python与MySQL数据库交互实践:自动化数据插入系统
  • Radiology:经颅交流电刺激调节轻度阿尔茨海默病皮层与海马功能连接
  • 【Docker实战】将Django应用容器化的完整指南
  • YOLOv8算法改进--通过yaml文件添加注意力机制【附代码】
  • 从Redisson源码角度深入理解Redis分布式锁的正确实现
  • JavaScript垃圾回收机制
  • 106-基于Flask的重庆充电桩投建数据可视化分析系统
  • Redis 监控与优化方案(C++项目)
  • ShadowKV 机制深度解析:高吞吐长上下文 LLM 推理的 KV 缓存“影子”方案
  • WSL创建虚拟机配置VNC
  • ADK【4】内置前端调用流程
  • Python数据分析常规步骤整理
  • [论文阅读] 人工智能 + 软件工程 | 大型语言模型对决传统方法:多语言漏洞修复能力大比拼
  • C# 中常用集合以及使用场景
  • 服务器硬件电路设计之 I2C 问答(三):I2C 总线上可以接多少个设备?如何保证数据的准确性?
  • Redis如何实现一个分布式锁?
  • ubuntu22.04安装autoware.universe
  • 进度、质量、安全的关系随笔
  • scala 样例类
  • 计算机视觉(CV)——图像相关基本概念
  • #C语言——刷题攻略:牛客编程入门训练(八):分支控制(二)
  • 7、西门子PLC基础术语:数据单位、存储区域、寻址方式、字节序
  • scanpy单细胞转录组python教程(二):单样本数据分析之数据质控
  • Spring Boot 开发三板斧:POM 依赖、注解与配置管理
  • 第三章 向量
  • 锂电池SOH预测 | 第35讲 Matlab基于BiLSTM的锂电池健康状态估计(锂电池SOH预测),附锂电池最新文章汇集
  • Python高阶
  • spring-boot-starter-data-redis 与 org.redisson 区别 联系
  • vue如何监听localstorage