AOP巨重要,不过我也是第一次看,一脸懵逼,得摸索一会儿,有问题可以留言我,虽然我也很菜
AOP基本概念
AOP概述
AOP–Aspect Oriented Programming,即面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护.
AOP是OOP(面向对象编程)的一个延续,是spring的一个重要内容,是函数式编程的一种衍生泛型.
利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分的耦合度降低,提高程序的可重用性,同时提高了开发的效率
AOP采用横向抽取机制,取代了传统**纵向继承体系(比如我们继承父类抽象类等)**解决重复性代码问题.
传统我们通过继承来实现代码重用的时候,因为要继承父类/抽象类,所以导致耦合度很高,开发效率蛮低.
而AOP采用横向抽取机制解决重复性代码问题时候,它不需要继承,它写一个切面类,将重复性代码放在里面,然后通过像过滤器这样子的方法拦截所有的需要用到这段代码的类及方法,在相关方法前面或者后面执行这段重复代码进行相关处理,就相当于添加了一个额外的功能,这样子耦合性就会比继承体系低很多.
经典应用场景: 事务管理,缓存,日志等.
Spring AOP使用java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码.
AspectJ是一个基于java语言的AOP框架,有jar包.
AOP实现原理
- aop底层采用代理机制实现,有以下两种方式:
spring采用jdk的动态代理Proxy,通过
接口 + 实现类
做到.spring采用cglib字节码增强,只需要通过
实现类
就能做到.AOP术语
用这样一个图片做例子
target: 目标类,即需要被代理的类, 例如图片中的业务类UserService.
Joinpoint(连接点): 指的是那些可能被拦截到的方法, 例如图片中所有的方法.
PointCut(切入点): 已经被增强(添加了额外功能)的连接点, 例如图片中的addUser()方法.
advice 理解为通知/增强, 里面写着增强代码的方法,主要用于增强代码.例如: 图片中的after,before方法.
Weaving(织入): 是指把增强advice应用到目标对象target来创建新的代理对象proxy的过程,简单理解就是把增强的功能通过代理实现到目标对象中.
proxy: 代理类
Aspect(切面): 是切入点pointCut和通知advice的结合.
其中,一条线是一个特殊的面.
一个切入点和一个通知,组成一个特殊的面.
JDK动态代理实现AOP
- 没听懂,没整明白,我还得去找点其他视频再看两遍,视频放这里: 链接:https://pan.baidu.com/s/13i7F9FPo-L3WPChjy0tj0w 提取码:k3rj
cglib增强字节码实现AOP
不需要用到接口,只需要实现类
采用字节码增强框架cglib,在运行时,创建目标类的子类,从而对目标类进行增强.
其jar包在spring-core中已经整合了.
没整明白,视频放这里: 链接:https://pan.baidu.com/s/1lP8QjIK5b_dzSPkyEhuBeA 提取码:t6i6