导图社区 SpringBoot核心接口
这张思维导图详细地展示了SpringApplication#run方法的执行流程,从初始设置、环境准备、上下文创建与刷新,到最后的监听器触发,涵盖了Spring应用程序启动过程中的关键步骤和相关组件,有助于理解Spring Boot应用的启动机制。
编辑于2025-10-11 23:05:01SpringApplication#run
new SpringApplication#run
注册ApplicationContextInitializer
注册ApplicationListener
解析启动主类
StopWatch.start
configureHeadlessProperty
getRunListeners
EventPublishingRunListener
listeners.starting
SpringApplicationRunListener
ApplicationStartingEvent
prepareEnvironment
getOrCreateEnvironment
configureEnvironment/profile
SpringApplicationRunListener
ConfigFileApplicationListener EnvironmentPostProcessor PropertySourceOrderingPostProcessor
createApplicationContext
AnnotationConfigServletWebServerApplicationContext
new AnnotatedBeanDefinitionReader
AnnotationConfigUtils.registerAnnotationConfigProcessors
注册ConfigurationClassPostProcessor
注册AutowiredAnnotationBeanPostProcessor
注册CommonAnnotationBeanPostProcessor
注册EventListenerMethodProcessor
new ClassPathBeanDefinitionScanner
exceptionReporters:SpringFactories
prepareContext
context.setEnvironment
ApplicationContextInitializer#initialize
ApplicationContextInitializer初始化定制
SpringApplicationRunListener
ApplicationContextInitializedEvent
BeanDefinitionLoader#load 注册Application类
SpringApplicationRunListener
ApplicationPreparedEvent
refreshContext
refresh
prepareRefresh
obtainFreshBeanFactory
prepareBeanFactory
beanFactory.registerResolvableDependency
BeanFactory
ApplicationEventPublisher
ApplicationListenerDetector
ConfigurableEnvironment
postProcessBeanFactory
ClassPathBeanDefinitionScanner
findCandidateComponents
registerBeanDefinition
AnnotatedBeanDefinitionReader
conditionEvaluator.shouldSkip
scan regist
invokeBeanFactoryPostProcessors
PostProcessorRegistrationDelegate #invokeBeanFactoryPostProcessors
BeanFactoryPostProcessor#postProcessBeanDefinitionRegistry
BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry
ConfigurationClassPostProcessor
BeanFactoryPostProcessor#postProcessBeanFactory
registerBeanPostProcessors
PostProcessorRegistrationDelegate #registerBeanPostProcessors
MessageSource
initApplicationEventMulticaster
onRefresh
创建webServer
registerListeners
getApplicationEventMulticaster().addApplicationListenerBean
multicastEvent/earlyEvent
finishBeanFactoryInitialization
preInstantiateSingletons
doGetBean
getSingleton
beforeSingletonCreation:循环依赖检测
createBean
resolveBeforeInstantiation
AwareBeanPostProcessor#postProcessBeforeInstantiation postProcessAfterInitialization
doCreateBean
createBeanInstance:创建对象实例
instantiateUsingFactoryMethod:工厂方法
beanFactory.getBean创建configuration工厂类
autowireConstructor
instantiateBean
AutowiredAnnotationBeanPostProcessor#determineCandidateConstructors
MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition
addSingletonFactory:单例缓存
循环引用,早期暴露对象 SmartInstantiationAwareBeanPostProcessor#getEarlyBeanReference
populateBean:依赖注入
populateBean
InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation
autowireByName
处理XML自动配置
autowireByType
InstantiationAwareBeanPostProcessor#postProcessProperties InstantiationAwareBeanPostProcessor#postProcessPropertyValues
AutowiredAnnotationBeanPostProcessor @Autowired/@Value CommonAnnotationBeanPostProcessor @Resource/PostConstruct/@PreDestroy
AbstractAutowireCapableBeanFactory#applyPropertyValues
通过BeanDefinitionBuilder#addPropertyValue自定义注入属性
initializeBean:初始化
invokeAwareMethods
BeanNameAware#setBeanName
BeanFactoryAware#setBeanFactory
applyBeanPostProcessorsBeforeInitialization BeanPostProcessor#postProcessBeforeInitialization
ApplicationContextAwareProcessor
ApplicationContextAwareProcessor
EnvironmentAware
ApplicationEventPublisherAware
ApplicationContextAware
InstantiationAwareBeanPostProcessor
InitDestroyAnnotationBeanPostProcessor
ConfigurationPropertiesBindingPostProcessor
@ConfigurationProperties
invokeInitMethods
InitializingBean#afterPropertiesSet
applyBeanPostProcessorsAfterInitialization BeanPostProcessor#postProcessAfterInitialization
AbstractAutoProxyCreator#postProcessAfterInitialization
AOP核心实现
SmartInitializingSingleton#afterSingletonsInstantiated
registerDisposableBeanIfNecessary
销毁回调函数注册
afterSingletonCreation
addSingleton
SmartInitializingSingleton#afterSingletonsInstantiated
beanFactory.addEmbeddedValueResolver
finishRefresh
ContextRefreshedEvent
ServletWebServerInitializedEvent
afterRefresh
listeners.started
callRunners
listeners.running
EventPublishingRunListener ApplicationReadyEvent