详见 第3,4个代码文件夹
代码库也可见
https://blog.csdn.net/ncepu_Chen/article/details/94857481
AOP =
把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,
对我们的已有方法进行增强。
作用:
在程序运行期间,不修改源码对已有方法进行增强。
优势:
减少重复代码
提高开发效率
维护方便
AOP 的实现方式:
动态代理
整个流程:
a、开发阶段(我们做的)
编写核心业务代码(开发主线):大部分程序员来做,要求熟悉业务需求。
把公用代码抽取出来,制作成通知。(开发阶段最后再做):AOP 编程人员来做。
在配置文件中,声明切入点与通知间的关系,即切面。:AOP 编程人员来做。
b、运行阶段(Spring 框架完成的)
Spring 框架监控切入点方法的执行。
一旦监控到切入点方法被运行,使用代理机制,动态创建目标对象的代理对象,
根据通知类别,在代理对象的对应位置,将通知对应的功能织入,
完成完整的代码逻辑运行。
1.AOP 的 术语
Joinpoint(连接点):
所谓连接点是指那些被拦截到的点。
在 spring 中,这些点指的是
方法, 因为 spring 只支持方法类型的连接点。
Pointcut(切入点):
所谓切入点是指我们要 对哪些 Joinpoint=方法 进行拦截 的定义。
Advice(通知=增强):
所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知。
通知的类型:
前置通知,后置通知,异常通知,最终通知,环绕通知。
Introduction(引介):
引介是一种特殊的通知在不修改类代码的前提下,
Introduction 可以在运行期为类 动态地添加一些 方法或 Field。
Target(目标对象):
代理的目标对象。
Weaving(织入):
是指把增强应用到目标对象来创建新的代理对象的过程。
spring采用动态代理织入,而 AspectJ 采用编译期织入和类装载期织入。
Proxy(代理):
一个类被 AOP 织入增强后,就产生一个结果代理类。
Aspect(切面):
是切入点和通知(引介)的结合
实际开发中 切入点表达式 的通常写法:
切到 业务层 实现类下的所有方法
* com.itheima.service.impl.*.*(..)
访问修饰符 返回值 包名.包名.包名...类名.方法名(参数列表)
访问修饰符可以省略
写CRUD时,每个对数据库的操作
都创建了1个 连接,
每个连接 都提交了事务,
当中间有一行代码出问题,下1个事务提交失败 金额就出了纰漏
解决思路:
ThreadLocal 可以拿到1个connection
把此connection和 当前线程 绑定到一起就可以。
在java中,除了static和单例是共享变量,其余的都是线程私有的。(关于ThreadLocal详见收藏查漏补缺夹)
可以对ThreadLocal中的connection get、set、remove