【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

相关推荐
乐观的Terry6 小时前
3、数据库设计与领域实体
java·数据库·spring boot·spring cloud·ai编程
霸道流氓气质12 小时前
SpringBoot中使用字典驱动的动态路由示例
java·spring boot·后端
万亿少女的梦16812 小时前
基于Spring Boot、Vue与MySQL的高校实习信息管理系统设计与实现
spring boot·mysql·vue·权限管理·restful api
宠友信息13 小时前
Spring Boot与Redis ZSet实现仿小红书源码双列瀑布流推荐
java·大数据·前端·spring boot·redis·mysql·uni-app
hdsoft_huge13 小时前
SpringBoot 系列 20:Jar 打包 + Docker 容器化 + Compose 一键部署|服务器上线 & 零停机平滑升级全教程
spring boot·docker·jar
invicinble14 小时前
关于微服务基本框架搭建--fegin最小使用demo
java·spring boot·微服务
码农进化录14 小时前
Java 程序员的 AI 进化论 | AI 辅助 CI/CD,让 AI 帮你做代码审查和部署决策
java·spring boot·openai
ppandss116 小时前
Spring Boot 拦截器,我把学习踩坑过程画了张图
spring boot·后端·学习
卓怡学长1 天前
w255基于springboot仓库管理系统
java·数据库·spring boot·spring·intellij-idea
csdn2015_1 天前
springboot读取配置的方法
java·spring boot·spring