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

Springboot扫描注解类

Springboot扫描注解类的入口在AbstractApplicationContext的refresh中,对启动步骤不太了解的,可参考https://blog.csdn.net/leadseczgw01/article/details/128930925

BeanDefinitionRegistryPostProcessor接口有多个实现类,扫描Controller、Service等组件,这里使用的是ConfigurationClassPostProcessor的postProcessBeanDefinitionRegistry。

查看processConfigBeanDefinitions方法中的parser.parse(candidates),作用为解析所有@Configuration类,所有组件注解都包含@Configuration,实际就是解析

所有组件。

下图,如果BeanDefinition属于AnnotatedBeanDefinition,就开始解析注解bean定义。

在处理配置类的注解时,会找到ComponentScans注解,并解析其内容(@SpringBootApplication注解就包含@ComponentScan),由于未配置basePackages属性,解析到最后使用声明的类名。

后面扫描包,通过查看doScan方法的实现类,可以看到有两个,一个是ClassPathBeanDefinitionScanner(spring),另一个是ClassPathMapperScanner(使用mybatis集成的)。

这里使用的是ClassPathBeanDefinitionScanner的doscan方法。

扫描basePackage下的组件。

再对beanDefinition做一些后置处理。

上面完成了初步的BeanDefinition构建,在checkCandidate方法中将决定是否注册该BeanDefinition。

调用registerBeanDefinition方法开始注册BeanDefinition。

DefaultListableBeanFactory的registerBeanDefinition方法中进行注册。

判断是否开始了bean创建。

已经有2个框架类开始创建,进入synchronized方法块进行添加。

注册完bean definition后同时给bean name注册别名。

http://www.lryc.cn/news/4986.html

相关文章:

  • Apache日志分析器
  • 啪,还敢抛出异常
  • Apache JMeter 5.5 下载安装以及设置中文教程
  • string类模拟实现
  • cadence SPB17.4 S032 - allegro - 保存/载入光绘层定义
  • 微服务实战--高级篇:分布式缓存 Redis
  • 【C语言】可变参数列表
  • 目标检测的旋框框文献学习
  • Hive 在工作中的调优总结
  • 每天一道大厂SQL题【Day09】充值日志SQL实战
  • MATLAB 遗传算法
  • 探讨 Java 中 valueOf 和 parseInt 的区别
  • JSON学习笔记
  • 家政服务小程序实战教程07-轮播图组件
  • MySQL之索引创建、删除、唯一索引、普通索引、及命名规则、注意事项
  • 【C++设计模式】学习笔记(3):策略模式 Strategy
  • Java——聊聊JUC中的ThreadLocal
  • 软件工程(4)--螺旋模型
  • 图解LeetCode——剑指 Offer 50. 第一个只出现一次的字符
  • 《HTML 5与CSS 3核心技法》读书笔记
  • 【沐风老师】3DMAX几何投影插件Geometry Projection使用详解
  • 面试问题整理
  • “区块链60人”2022赋能中国区块链创新人物名单公布
  • day2324 数组
  • 【Python实战】神仙运气—快看看你的彩票:2千多万元大奖无人领,马上就过期了,下一期的中奖者会是你吗?(纯技术交流)
  • 2023年上半年软考高项信息系统项目管理师2月25日开班
  • 数据库(第一天)
  • 一文了解 ArrayList 的扩容机制
  • 牛态已成选股源码
  • Python基础