【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

相关推荐
麦兜*10 分钟前
Redis 7.2 新特性实战:Client-Side Caching(客户端缓存)如何大幅降低延迟?
数据库·spring boot·redis·spring·spring cloud·缓存·tomcat
熊小猿32 分钟前
Spring Boot 的 7 大核心优势
java·spring boot·后端
yunmi_39 分钟前
安全框架 SpringSecurity 入门(超详细,IDEA2024)
java·spring boot·spring·junit·maven·mybatis·spring security
wuxuanok1 小时前
苍穹外卖 —— 公共字段填充
java·开发语言·spring boot·spring·mybatis
汪不止3 小时前
Spring Boot 应用启动机制详解
java·spring boot·后端
matlab的学徒4 小时前
nginx+springboot+redis+mysql+elfk
linux·spring boot·redis·nginx
深色風信子4 小时前
SpringBoot 集成 LangChain4j 本地调用 Ollama
java·spring boot·spring·ollama·langchain4j
EnCi Zheng14 小时前
SpringBoot + PostgreSQL 密码认证失败 Windows 系统解决方案
windows·spring boot·postgresql
EnCi Zheng14 小时前
@ResponseStatus 注解详解
java·spring boot·后端
Arva .14 小时前
开发准备之日志 git
spring boot·git·后端