【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

相关推荐
Muscleheng6 小时前
SpringBoot 集成 DeepSeek 实现 RAG 文档问答
java·spring boot·ai·springai
suconnect10 小时前
Spring Boot接入企业RAG:文档切分、向量检索、权限过滤和答案溯源
java·spring boot·后端
weixin_BYSJ198710 小时前
springboot校园自习室管理小程序---附源码32142
java·javascript·spring boot·python·django·flask·php
旺仔学长 哈哈10 小时前
Spring Boot 智能停车场管理系统---附源码+数据库文档
数据库·spring boot·后端·智能停车场
小Ti客栈10 小时前
SpringBoot 事件发布机制:原理与应用
java·spring boot·spring
huahailing102413 小时前
Spring Boot 集成 XXL-Job 完整实现方案(支持动态CRUD)
java·spring boot·后端
音符犹如代码15 小时前
Arthas Profiler 火焰图实战:CPU 热点在哪一目了然
java·jvm·spring boot
大模型丫丫16 小时前
Spring Boot 入门指南:从零开始构建微服务
spring boot·微服务·firefox
Flynt17 小时前
Spring Boot 3开虚拟线程,我把生产服务搞崩了两次
java·spring boot
Full Stack Developme18 小时前
SpringBoot 内嵌 Tomcat 的启动流程
spring boot·后端·tomcat