Spring深度学习(二)AOP
1.什么是AOP?
面向切面(方面)编程,是OOP(面向对象编程)的延续,
OOP:封装、继承、多态
AOP:
使用场景:针对每个方法的开始结束统一处理(性能监控,事务控制,权限校验,日志处理)
解决问题:横切逻辑代码(几乎每个方法都存在的位置,内容一致的代码),代码冗余,与业务代码混杂,
切:指的是横切逻辑,原有业务代码不能改变,只能操作横切逻辑代码
面:很多方法都存在,
常用术语
名词 | 解释 |
---|---|
joinpoint(切入点): | 它指的是那些可以用于把增强代码加入到业务主线中的点,那么由上图中我们可 以看出,这些点指的就是方法。在方法执行的前后通过动态代理技术加入增强的 代码。在Spring框架AOP思想的技术实现中,也只支持方法类型的连接点。 |
Pointcut(切 入点) | 它指的是那些已经把增强代码加入到业务主线进来之后的连接点。由上图中,我 们看出表现层 transfer 方法就只是连接点,因为判断访问权限的功能并没有对 其增强。 |
Advice(通 知/增强) | 它指的是切面类中用于提供增强功能的方法。并且不同的方法增强的时机是不一 样的。比如,开启事务肯定要在业务方法执行之前执行;提交事务要在业务方法 正常执行之后执行,而回滚事务要在业务方法执行产生异常之后执行等等。那么 这些就是通知的类型。其分类有:前置通知 后置通知 异常通知 最终通知 环绕通 知。 |
Target(目标 对象) | 它指的是代理的目标对象。即被代理对象。 |
Proxy(代理) | 它指的是一个类被AOP织入增强后,产生的代理类。即代理对象。 |
Weaving(织 入) | 它指的是把增强应用到目标对象来创建新的代理对象的过程。spring采用动态代 理织入,而AspectJ采用编译期织入和类装载期织入。 |
Aspect(切 面) | 它指定是增强的代码所关注的方面,把这些相关的增强代码定义到一个类中,这 个类就是切面类。例如,事务切面,它里面定义的方法就是和事务相关的,像开 启事务,提交事务,回滚事务等等,不会定义其他与事务无关的方法。我们前面 的案例中 TrasnactionManager 就是一个切面。 |
连接点:方法开始时、结束时、正常运行完毕时、方法异常时等这些特殊的时机点,我们称之为连接点,项目中每个方法都有连接点,连接点是一种候选点
切入点:指定AOP思想想要影响的具体方法是哪些,描述感兴趣的方法
Advice增强:
第一个层次:指的是横切逻辑
第二个层次:方位点(在某一些连接点上加入横切逻辑,那么这些连接点就叫做方位点,描述的是具体
的特殊时机)
Aspect切面:切面概念是对上述概念的一个综合
Aspect切面= 切入点+增强
= 切入点(锁定方法) + 方位点(锁定方法中的特殊时机)+ 横切逻辑
为了锁定要在哪个地方插入什么横切逻辑代码