【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

相关推荐
BENA ceic12 小时前
Java进阶-在Ubuntu上部署SpringBoot应用
java·spring boot·ubuntu
我登哥MVP13 小时前
【SpringMVC笔记】 - 11 - SpringMVC 执行流程
java·spring boot·笔记·spring·tomcat·intellij-idea
Flittly14 小时前
【SpringSecurity新手村系列】(7)基于资源权限码(Authority)的接口权限控制实战
java·spring boot·安全
zhenxin012215 小时前
GitSubmodule避坑指南:从入门到精通
spring boot·后端·spring
他是龙55115 小时前
68:Java 原生反序列化 & SpringBoot 攻防
java·开发语言·spring boot
阿丰资源16 小时前
基于SpringBoot+MySQL的校园管理系统设计与实现(源码+文档+数据库,直接运行)
数据库·spring boot·mysql
xiaogg367818 小时前
springcloud oauth2 自定义token实现
spring boot·后端·spring cloud
Flittly19 小时前
【SpringSecurity新手村系列】(5)RBAC角色权限与账户状态校验
java·spring boot·笔记·安全·spring·ai
Flittly19 小时前
【SpringSecurity新手村系列】(6)基于角色的权限控制、权限拦截注解与自定义无权限页面
java·spring boot·安全·spring·安全架构