配置加载覆盖值顺序
- 开发工具主目录上的全局设置属性(~/.spring-boot-devtools.properties,当开发工具处于活动状态时)
- 测试中的@TestPropertySource注解
- 测试的属性。在@SpringBootTest和测试注释上提供,用于测试应用程序的特定部分。
- 命令行参数
- SPRING_APPLICATION_JSON的属性(嵌入在环境变量或系统属性中的内联json)。
- ServletConfig 初始化参数
- ServletContext 初始化参数
- java:comp/env的JNDI参数
- Java系统属性(System.getProperties()).
- 操作系统环境变量.
- RandomValuePropertySource,其属性仅为random.*。
- 在打包的JAR之外配置特定的应用程序属性(application-{profile}.properties和yaml变量)。
- 在打包的JAR之中配置特定的应用程序属性(application-{profile}.properties和yaml变量)
- 打包JAR之外的应用程序属性(application.properties和yaml变量)。
- 打包JAR之内的应用程序属性(application.properties和yaml变量)。
- @PropertySource注解在你的@Configuration 类.
- 默认属性(通过设置SpringApplication.setDefaultProperties指定)。
ApplicationEvent顺序
- ApplicationStartingEvent
prepareEnvironment
- ApplicationEnvironmentPreparedEvent
prepareContenxt load beans (benDefinitions)
- ApplicationContextInitializedEvent
- ApplicationPreparedEvent
refreshContext refresh
tomcat stated 8080
- ServletWebServerInitializedEvent
event managementContex.refresh()
tomcat stated 6888
- ServletWebServerInitializedEvent
- ContextRefreshedEvent 8080(2.1) 6888(2.3)
- ContextRefreshedEvent 6888 8080
afterRefresh
- ApplicationStartedEvent
- AvailabilityChangeEvent
- ApplicationReadyEvent
- AvailabilityChangeEvent
Configuration解析
ConfigurationClassParser#parse,#doProcessConfigurationClass
递归解析全部beanDefinitions
解析顺序
- @Component
- @PropertySources
- @ComponentScan
- @Import
- @ImportResource
- @Bean methods
- @Bean default methods on interfaces
- 解析SupperClass,去重
- 最后调用DeferredImportSelectorGroupingHandler#processGroupImports加载@EnableAutoConfiguration,然后排序
DeferredImportSelectorGroupingHandler#processGroupImports
autoConfiguration加载入口,排序
AutoConfigurationImportListener
处理autoConfiguration加载事件,未排序,不可修改数据
AutoConfugrations#sort
排序规则
- 按字母排序
- 按@AutoConfigureOrder排序
- 按@AutoConfigureBefore @AutoConfigureAfter排序
BeanDefinition加载
Configuration解析完成后,调用ConfigurationClassBeanDefinitionReader#loadBeanDefinitions加载beanDefinition
ConfigurationClassBeanDefinitionReader#loadBeanDefinitions
- beanName存在就不注册
- 注册自身
- 注册@Bean beanMethod
- 注册@ImportResource
- 注册interface ImportBeanDefinitionsRegistrar
Bean加载
版权声明:《 springboot源码笔记 》为Saber原创文章,转载请注明出处!
最后编辑:2023-9-16 03:09:46