String AOP、事务、缓存
Spring AOP
Spring AOP,面向切面编程 Aspect Orinted Programming
传统:纵向编程(垂直编程)
也就是写代码从上往下写的:
切面:横向编程,批量操作。
指的是目前有三个类,想统计一下这三个类中的代码一共执行了多少时间 。如果单独计算,再求和,可以统计出来,但是如果项目有很多个类,那么需要写很多次,比较麻烦,而且会出现代码侵入问题 ,这是不良好的实现。
所以出现了面向切面编程:(都是横向切入的批量操作)
在任意位置同时横向(水平)切入一些代码 ,不需要的时候随时能去掉这部分代码。在业务类中看不在,是在别的地方写的。切向编程使用的原理:动态代理。
那什么是代理呢?
基于代理模式(对目标业务进行改变或增强)。代理(替代另外一个“人/业务”的工作,代理过程中对目标业务进行改变或者增强,但是对外提供的接口不变,对外用户无感知):分为静态代理和动态代理
怎么理解代理 ?
代理的理解 :比如用户去火车站/高铁站买票,用户可以去火车站线下售票点买票,也可以线上买票,用户最终拿到的都是票,对用户的结果是 一样的。但是其实火车站线下售票处可能对售票做了增强,比如出票速度可能更快,或者票价更贵 ,这就是代理模式。
代理模式:
分为静态代理和动态代理。
一、静态代理。(用的很少 )
静态代理就是在程序编译运行之前 ,代理业务就已经创立确定,可以预测了
- 手动编码。
- 使用jaspect注解自动生成。
二、动态代理
动态代理就是必须在程序跑起来之后,在内存中创建的代理。是在程序运行期间创建的。
动态代理是在程序运行期间,创建目标类的代理实例。
-
JDK动态代理:无需引入第三方库,jdk默认支持。要求:代理类必须实现接口。
-
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有关。
其他详细介绍