文章目录
1.1 什么是AOP
AOP
- 是一种技术,
- 运行期间执行,
- 通过动态代理来完成。动态代理的优点:不修改源码的基础上对目标方法进行增强;作用:完成程序功能间的松耦合
有A和B两种功能,要进行结合,不把这2个功能的代码写在一起,因为写在一起A和B功能就耦合了。可以让A和B功能在运行时动态结合在一起,
如果B、C、D都需要A功能,那么使用AOP的配置就可以把他们分别结合在一起
1.2 AOP的作用及优势
当save、update和delete方法都需要日志控制时,
- 原来的写法,每个方法都写一个日志控制功能:
缺点是,要想改日志控制,需要改三处 - 可以把日志控制方法抽取出去,然后需要用的时候引用:
缺点是日志控制和方法耦合死了 - AOP的方法:
在save运行前调用日志控制,使用配置文件来使日志文件和save方法结合
1.3 AOP的底层实现
1.4 AOP的动态代理技术
目标对象有接口用JDK代理,没有接口用cglib代理
- JDK动态代理:
基于目标接口在运行期间动态生成代理对象,基于接口使得代理对象和目标对象有相同的方法 - cglib动态代理:
没有接口的情况下,为目标对象在运行期间动态生成子对象即代理对象,来保证目标对象和代理对象有相同的方法,子对象功能比父对象更强大(实际上不是继承)调用时,调用的是代理对象,然后再由代理对象调用目标对象
1.5 基于JDK的动态代理底层代码
接口字节码对象数组:接口可能有多个。
如果有多个接口,Proxy.newProxyInstance()返回值是哪个接口类型的?
1.6 基于cglib的动态代理底层代码
spring已经集成了cglib
以上代码都被Spring封装了
1.7 AOP相关概念
可以被增强的方法(目标对象)叫连接点
被增强的方法中真正要被增强的方法叫做切点
连接点 - 公民,切点 - 人大代表,不是所有的公民都能成为人大代表
包含增强逻辑的方法叫做Advice
切面=目标方法(切点)+增强(通知)
织入:将切点和增强结合在一起的过程,配置的过程
1.8 AOP开发明确的事项
AOP技术实现的内容:配置好切点后,执行切点方法时,Spring就会监控到,然后Spring就会创建一个代理对象,然后调用代理对象的方法,内部会调用目标方法的同时还会帮忙增强这个方法