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:

一。原子性。二、一致性、三、隔离性、四、持久性。 原一隔持。

sql 复制代码
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有关。

其他详细介绍