Spring|Spring AOP从原理到源码(一)
为什么写这篇文章
AOP的源码之前看了2遍,大体流程基本都懂,但总感觉不太深刻,还有很多细节也不算熟悉,里面的类关系也非常复杂。
之前参考的一些博客,基本上没有解释核心类(即没有对核心类进行归类,导致看源码的时候感觉一会一个这个,一会一个那个,比较乱),二是没有对核心过程进行总结,上来就一头扎进源码里,最后是个人认为spring aop的源码只是对ProxyFactory
进行封装,自上而下的阅读方法并不合适,应该先掌握了ProxyFactory
以后,再看源码就能事半功倍。
每个人都有自己的学习方法,本文也不一定适合所有人,如果能给部分人带来帮助,就不错了。为什么使用AOP? Spring AOP与AspectJ的区别? Spring AOP核心类
文章图片
image.png
文章图片
image.png
文章图片
image.png
Advice
定义在连接点做什么。Pointcut
是用来匹配切入点的。Advisor
把Pointcut
和Advice
结合起来。ProxyFactory
编程式ProxyFactoryBean
结合IOC,声明式AdvisedSupport
保存着代理相关配置的类。核心类的介绍大家先不用纠结,先大概有个了解,可以看看源码的注释,这些东西都需要反复好几次才能完全了解并记住,后面真正看源码的时候这几幅图肯定还需要再看的。背景知识
- 设计模式:工厂、代理、适配器、责任链
- 静态代理与动态代理
可以深入到JDK动态代理的原理,可参考Java动态代理研究Spring AOP核心过程
- 目标对象和拦截器的获取
- 代理对象的生成
- 调用过程中拦截器链触发拦截,实现对功能的增强
这里为什么写得这么简单,因为AOP的核心就是这么几个部分,最精髓的东西已经说出来了,永远记住这几个步骤,看源码的时候记住你现在看的是核心过程的哪个阶段,那你理解起源码来,真没什么难度。小结 【Spring|Spring AOP从原理到源码(一)】下一节,将自己手写一个简单的AOP,模拟对目标对象的增强。
转载请说明出处!
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 一个人的碎碎念
- 我从来不做坏事
- 由浅入深理解AOP
- Activiti(一)SpringBoot2集成Activiti6
- 从蓦然回首到花开在眼前,都是为了更好的明天。
- 西湖游
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 改变自己,先从自我反思开始