SpringBoot启动源码分析
(2022-05-03 15:05:42)| 分类: JAVA开发 |
new SpringApplication()
initializer
<-- get spring factory
instances
listenner
<-- get spring factory
instances
java.lang.Thread.State: RUNNABLE
at
org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.
at
org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.
at
org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.
at
org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.
at
org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.
at
org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.
- locked <0xb25>
(a
at
org.springframework.boot.SpringApplication.refresh(SpringApplication.
at
org.springframework.boot.SpringApplication.refreshContext(SpringApplication.
at
org.springframework.boot.SpringApplication.run(SpringApplication.
at
org.springframework.boot.SpringApplication.run(SpringApplication.
at
org.springframework.boot.SpringApplication.run(SpringApplication.
at
com.yinyu.demo.DemoApplication.main(DemoApplication.
createApplicationContext ()
# ConfigurationClassPostPr ocessor 注册
internalConfigurationAnn otationProcessor
this.reader = new
AnnotatedBeanDefinitionR eader(this);
this.scanner = new
ClassPathBeanDefinitionS canner(this);
prepareContext()
load() <-- primary source class
注:
SpringFactoriesLoader
<-- spring.factories
DefaultListableBeanFacto ry ::
registerBeanDefinition
prepareContext()
注:
SpringFactoriesLoader
DefaultListableBeanFacto
SingletonBeanRegistry ::
registerSingleton
ConfigurableApplicationContext
environment bean name 定义
AbstractApplicationContext ::
prepareBeanFactory enviroment
bean 注册
AbstractApplicationConte
环境:
SpringBoot: 2.5.5
SpringCore: 5.3.10
配置发起点:
"main@1" prio=5 tid=0x1 nid=NA runnable
createApplicationContext =>
new
AnnotationConfigApplicat ionContext()
this.reader = new
AnnotatedBeanDefinitionR eader (this);
this.scanner = new
ClassPathBeanDefinitionS canner (this);
org.springframework.context.annotation.AnnotationConfigApplicat ionContext.(AnnotationConfigApplicat ionContext.
at
org.springframework.boot.ApplicationContextFactor y.lambda$static$0(ApplicationContextFactor y.
at
org.springframework.boot.SpringApplication.createApplicationContext (SpringApplication.
at
org.springframework.boot.SpringApplication.run(SpringApplication.
at
com.yinyu.demo.DemoApplication.main(DemoApplication.
org.springframework.context.annotation.AnnotationConfigApplicat
prepareContext
applyInitializers(context);
BeanDefinitionLoader loader.load();
// main app class
如下两个方法完成了Spring的扫描注册功能:
reader.register(Class[?]... annotatedClasses);
scanner.scan(String... basePackages);
reader.register(Class[?]... annotatedClasses);
scanner.scan(String... basePackages);

加载中…