Spring AOP从原理到源码(一)
2020-04-20 本文已影响0人
李不言被占用了
为什么写这篇文章
AOP的源码之前看了2遍,大体流程基本都懂,但总感觉不太深刻,还有很多细节也不算熟悉,里面的类关系也非常复杂。
之前参考的一些博客,基本上没有解释核心类(即没有对核心类进行归类,导致看源码的时候感觉一会一个这个,一会一个那个,比较乱),二是没有对核心过程进行总结,上来就一头扎进源码里,最后是个人认为spring aop的源码只是对ProxyFactory
进行封装,自上而下的阅读方法并不合适,应该先掌握了ProxyFactory
以后,再看源码就能事半功倍。
每个人都有自己的学习方法,本文也不一定适合所有人,如果能给部分人带来帮助,就不错了。
为什么使用AOP?
Spring AOP与AspectJ的区别?
Spring AOP核心类
![](https://img.haomeiwen.com/i1716507/cfff2f941fc184c3.png)
![](https://img.haomeiwen.com/i1716507/0bd6f7c9d6045d4a.png)
![](https://img.haomeiwen.com/i1716507/43d17d610e5fd10e.png)
Advice
定义在连接点做什么。
Pointcut
是用来匹配切入点的。
Advisor
把Pointcut
和Advice
结合起来。
ProxyFactory
编程式
ProxyFactoryBean
结合IOC,声明式
AdvisedSupport
保存着代理相关配置的类。
核心类的介绍大家先不用纠结,先大概有个了解,可以看看源码的注释,这些东西都需要反复好几次才能完全了解并记住,后面真正看源码的时候这几幅图肯定还需要再看的。
背景知识
- 设计模式:工厂、代理、适配器、责任链
- 静态代理与动态代理
可以深入到JDK动态代理的原理,可参考Java动态代理研究
Spring AOP核心过程
- 目标对象和拦截器的获取
- 代理对象的生成
- 调用过程中拦截器链触发拦截,实现对功能的增强
这里为什么写得这么简单,因为AOP的核心就是这么几个部分,最精髓的东西已经说出来了,永远记住这几个步骤,看源码的时候记住你现在看的是核心过程的哪个阶段,那你理解起源码来,真没什么难度。