当前位置: 首页 > ds >正文

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器

在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时判断是否有对bean对象切入的通知,如果有则生成代理对象

那么【AnnotationAwareAspectJAutoProxyCreator】这个类是如何放到后置处理器的集合中的呢?

带着疑问我跟了下【org.springframework.beans.factory.support.AbstractBeanFactory#getBeanPostProcessors】发现【org.springframework.beans.factory.support.AbstractBeanFactory#beanPostProcessors】是一个集合,所以我找到了【java.util.List#add(E)】方法来继续跟踪

源头是【org.springframework.context.support.AbstractApplicationContext#registerBeanPostProcessors】

实际上是获取bean名称,通过bean名称来获取bean对象,最后注册该bean对象为后置处理器,那么这个bean名称是从哪里获取的呢?

源头是【org.springframework.beans.factory.ListableBeanFactory#getBeanNamesForType(java.lang.Class<?>, boolean, boolean)】,那么继续跟踪这个方法,有一个叫做【org.springframework.aop.config.internalAutoProxyCreator】的bean名称,就是通过这个bean名称生成的【AnnotationAwareAspectJAutoProxyCreator】,那么这个bean名称到底是哪来的呢?

跟踪得知是通过【org.springframework.beans.factory.support.DefaultListableBeanFactory#beanDefinitionNames】获得的

找到该集合的add方法所在的方法打断点后跟踪后得知实际上是通过【org.springframework.context.annotation.AspectJAutoProxyRegistrar】注册进去的

那么【org.springframework.context.annotation.AspectJAutoProxyRegistrar】又是如何触发的呢?经过跟踪在springboot启动后解析自动配置时去递归寻找【@Import】注解里导入的类并进行处理

源头

http://www.xdnf.cn/news/12984.html

相关文章:

  • 在Unity中Update和Fixedupdate有什么区别
  • 【读论文】OpenAI o3与o4系统模型技术报告解读
  • 数据源指的是哪里的数据,磁盘中还是内存中
  • 调试快捷键 pycharm vscode
  • 掌握Git核心:版本控制、分支管理与远程操作
  • 联邦学习与边缘计算结合
  • 一种停车场自动停车导航器的设计(论文+源码)
  • grpc和http的区别
  • 自动驾驶科普(百度Apollo)学习笔记
  • 【AI智能体】Dify 从部署到使用操作详解
  • 解决limit 1000000加载慢的问题
  • 【每天学点 Go 知识】Go 基础知识 + 基本数据类型快速入门
  • 【大模型RAG】Docker 一键部署 Milvus 完整攻略
  • 基于规则的自然语言处理
  • 基于多维视角的大模型提升认知医疗过程层次激励编程分析
  • 【数据结构】顺序表和链表详解(下)
  • 异步跟栈 webpack
  • 74常用控件_QSpacerItem的使用
  • 01-VMware16虚拟机详细安装
  • jmeter聚合报告中参数详解
  • 深度优先算法学习
  • Python学习——数组的行列互换
  • VSCode内网安装插件
  • 飞算 JavaAI 2.0.0:开启老项目迭代维护新时代
  • 零基础入门 C 语言基础知识(含面试题):结构体、联合体、枚举、链表、环形队列、指针全解析!
  • SpringCloud——微服务
  • Reasoning over Uncertain Text by Generative Large Language Models
  • NLP学习路线图(三十二): 模型压缩与优化
  • AWS 公开数据集下载与操作说明
  • RabbitMQ入门