获取文件中对应类的全路径
生成对应的对象之后再返回给调用者
starting
几个注解1.springBootApplication2.springBootConfig3.EnableAutoConfiguration4.ComponsentScan4.AutoConfigurationImport
监听器
日志
new SpringApplication
所有监听器在运行的过程中需要监听某些事件,各种不同的监听器的事件是不一样的在springapplication对象创建了11个监听器,但是这11个监听器的功能是不同的,换句话说就是监听器的事件是不同的,当开启监听器的时候,要判断当前监听器是否能监听该事件,如果可以正常启动,如果不可以则直接抛弃
加载listenerslisteners.contextLoaded(context);
向beanFactory中注入三个postprocessor的对象,后续再启动装配的时候会用到applyInitializers
6.装配命令行参数,命令行参数解析 (SimpleCommandLinePropertySource)解析在命令行中通过--key=vaue的值,封装到ApplicationArgument中
几个前期加载的值
每次监听器在实际的操作的时候都会执行listeners.*()
2.设置context应用上下文
转化器
获取或者创建一个环境,根据当前应用程序的类型来做判断的getOrCrateEnvirinment() 获取配置 servlet->strandServletEvniment
返回重要资源?-----
ConfigurationClassParserselectImports
启动当前应用程序main
15.listeners.runing()
getspringFactoriesInstnces
此处在看到创建上下文对象的对象之后一定要看类图在父子容器的中的完成了很多初始化的操作AnnotationConfigServletWebServerApplicationContextAnnotationConfigReactiveWebServerApplicationContextAnnotationConfigApplicationContextGenericApplicationContextDefaultListableBeanFactory
1.设置当前环境
记载spring.factoris文件中的内容
启动类
13.计时结束stopWatch.stop();
spring 自动装配过程
根据反射得到具体的实例类对象
starter扩展实现
this.refreshContext();
postProcessBeanDefinitionRegistry
对当前环境进行配置ConfigureEnvironment
ConfigurationClassParsergetImports
listeners.environmentPrepared((ConfigurableEnvironment)environment)
ConfigurationClassParserprocessImports
ConfigurationClassParser this.deferredImportSelectorHandler.process();
importConfigurationClassParsercollectImport
run启动
加载启动类获取SpringBootApplication
springAppliaction.run()
this.initiaMulticaster.multicasEvent
3.设置初始化进行执(applyInitializers)
加载很多资源配合,自动配置再此环节完成load()
14.运行所有监听器 listeners.started(context);
AutoConfigurationImportSelectorgetCandidateConfigurations
ConfigurationClassParserparse
符合条件的监听器会循环执行具体的自己的处理逻辑
3.设置异常报告器
ConfigurationClassPostProcessorpostProcessBeanDefinitionRegistry
ConfigurationClassParserdoProcessConfigurationClass
ConfigurationClassParserprocessConfigurationClass
7.设置系统属性,保证某些bean不会添加到准备的环境中
ConfigurationClassPostProcessorparse
invokeBeanFactoryPostProcessors
监听的处理
ConfigurationClassParserprocessGroupImports
验证器
字符集
5.创建监听器对象SpringApplicationRunListener1从配置文件中读取EventPublishingRunListener
AutoConfigurationImportSelectorselectImports
匹配不同类型的事件然后从所有的监听器中把不符合条件的监听器过滤掉
2.postProcessApplicationContext判断类归属于什么类型注册事件
invokeBeanDefinitionRegistryPostProcessors
4.设置java.awt.Headless参数为true
refresh
1.设置启动时的时间值StopWatch stopWatch = new StopWatch();
类型判断
4.事件注册监听listeners.contextPrepared()
11.刷新上下文环境(关键步骤)this.prepareContext();this.refreshContext();