该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读。

Spring 版本:5.1.14.RELEASE

在开始阅读 Spring AOP 源码之前,需要对 Spring IoC 有一定的了解,可查看我的 《死磕Spring之IoC篇 - 文章导读》 这一系列文章

了解 AOP 相关术语,可先查看 《Spring AOP 常见面试题) 》 这篇文章

该系列其他文章请查看:《死磕 Spring 之 AOP 篇 - 文章导读》

在前面几篇文章依次介绍了 Spring AOP 自动代理的整个过程,入口在 AbstractAutoProxyCreator 这个类中,它实现了几种 BeanPostProcessor接口,结合 Spring IoC,在 Bean 的加载过程中支持创建代理对象,通常在 Bean 的初始化后,也就是 Bean 处于一个“成熟态”的时候进行 AOP 代理。整个的处理过程比较复杂,需要找到当前 Spring 上下文所有的 Advisor,也就是 Advice 的容器接口,通常都是 PointcutAdvisor,还包含了一个 Pointcut 切点。接着就是从这些 Advisor 中筛选出能够应用于这个 Bean 的 Advisor 出来,经过一些处理过程,最后通过 JdkDynamicAopProxy(JDK 动态代理)或者 ObjenesisCglibAopProxy(CGLIB 动态代理)创建一个代理对象。

本文将会分析 Spring AOP 创建的两种代理对象的拦截处理是如何进行的。开始之前,我们得知道JDK 动态代理创建的代理对象,拦截处理在 InvocationHandler 实现类中;CGLIB 动态代理创建的代理对象,拦截处理在传入的 Callback 回调中,对于这两种代理对象不是很熟悉的小伙伴可查看我前面的文章

最新文章

  1. hibernate-cache
  2. Android 判断SIM卡属于哪个移动运营商
  3. Oracle日期格式转换
  4. mysql导入sql文件过大或连接超时的解决办法
  5. Jsp万能密码漏洞修复例子
  6. PAT-乙级-1048. 数字加密(20)
  7. DC-DC芯片 同步和異步方式有什么區別
  8. Pet(hdu 4707 BFS)
  9. [Android阅读代码]android-async-http源码学习一
  10. Bullet_Point_Py
  11. (七十八)使用第三方框架INTULocationManager实现定位
  12. 用java从0生成一个简单的excel
  13. Ubuntu 16.04下添加新用户
  14. Redis的五大数据类型
  15. 查找单链表的倒数第k个值
  16. 第二阶段Sprint冲刺会议8
  17. python learning Network Programming.py
  18. HDU 6187 Destroy Walls
  19. 网络基础知识-bps、Bps、pps的区别
  20. 3D打印产业链全景图

热门文章

  1. 自己写的一个抢票加速的Python小程序源码分享-----纯属娱乐
  2. Jump Server在docker中安装部署
  3. springboot的4种属性注入
  4. C++的指针,引用,指向指针的引用和Java中的引用
  5. Linux速通01 操作系统安装及简介
  6. 医学图像配准 | Voxelmorph 微分同胚 | MICCAI2019
  7. Vulkan移植GpuImage(一)高斯模糊与自适应阈值
  8. python stats画正态分布、指数分布、对数正态分布的QQ图
  9. Gevent高并发网络库精解
  10. filecoin今日价格,filecoin币价估值,filecoin币会涨到多少钱