【springboot】@SpringBootApplication 加载原理解析

从何处放入

AutoConfigurationImportSelector.selectImports

AbstractApplicationContext.refresh

AbstractApplicationContext.invokeBeanFactoryPostProcessors

PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors

此处一个关键信息 只有BeanDefinitionRegistryPostProcessor的,才会有下面的逻辑,下面是这个类的注释


ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry

ConfigurationClassPostProcessor.processConfigBeanDefinitions

ConfigurationClassParser.parse

ConfigurationClassParser.process

ConfigurationClassParser.processGroupImports

ConfigurationClassParser.getImports

AutoConfigurationImportSelector.process

AutoConfigurationImportSelector.getAutoConfigurationEntry

从此方法获取到了默认需要加载的类,返回 AutoConfigurationEntry

AbstractApplicationContext.refresh

AbstractApplicationContext.invokeBeanFactoryPostProcessors

PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors

ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry

ConfigurationClassPostProcessor.processConfigBeanDefinitions

ConfigurationClassBeanDefinitionReader.loadBeanDefinitions

ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass

ConfigurationClassBeanDefinitionReader.registerBeanDefinitionForImportedConfigurationClass

DefaultListableBeanFactory.registerBeanDefinition

至此,完成了第一步,放入了DefaultListableBeanFactory 的 beanDefinitionMap及beanDefinitionNames中

从何处取出并创建bean

AbstractApplicationContext.refresh

AbstractApplicationContext.finishBeanFactoryInitialization

DefaultListableBeanFactory.preInstantiateSingletons

接下来就是创建bean的流程了

AbstractBeanFactory.getBean

DefaultSingletonBeanRegistry.getSingleton

AbstractBeanFactory.getObject

AbstractAutowireCapableBeanFactory.createBean

AbstractAutowireCapableBeanFactory.doCreateBean

AbstractAutowireCapableBeanFactory.createBeanInstance

AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod

ConstructorResolver.instantiateUsingFactoryMethod

ConstructorResolver.instantiate

SimpleInstantiationStrategy.instantiate

相关推荐
程序猿乐锅6 小时前
【黑马点评 | 第四篇】Redis缓存雪崩
java·数据库·spring boot·redis·缓存
张小凡vip6 小时前
Java Web 设置 Session 超时时间:如何让 Session 永不失效
java·spring boot
考虑考虑15 小时前
Springboot环境变量占位符语法
spring boot·后端·spring
边境悍匪18 小时前
蜗牛学苑 Java 智能体学习 Day42|项目周开发技术汇总 1 思维导图复盘
java·开发语言·spring boot·学习·spring
xcl092519 小时前
本地电竞服务交易系统架构设计与实战:从同城匹配到订单履约
java·spring boot
白宇横流学长1 天前
基于springboot的个人博客系统的设计与实现【源码+文档】
java·spring boot
雪芽蓝域zzs1 天前
第 2 章:MySQL8.0 安装与基础配置
spring boot
行百里er1 天前
Spring Insight 里如何把 Span 画成瀑布时间线
spring boot·后端·监控
专业程序开发源1 天前
springboot旅游推荐系统82074-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·php·课程设计·旅游
user_admin_god1 天前
第 11 篇:实践三 —— 表单 / 合同字段抽取
java·人工智能·spring boot·语言模型