spring-boot-持续更新
2023-12-15 09:46:25 0 举报
spring-boot-2.7.10-持续更新
作者其他创作
大纲/内容
setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
FACTORIES_RESOURCE_LOCATION = META-INF/spring.factorie
DefaultBootstrapContext bootstrapContext = createBootstrapContext();
扩展方法
SpringFactoriesLoader
发布事件environmentPrepared
实例化所有提供的扩展
configureHeadlessProperty()
加载扩展
将默认的配置放到最后
AnnotationConfigServletWebServerApplicationContext
SpringApplication.run(font color=\"#ec7270\
@SpringBootConfiguration
@ComponentScan
StackTraceElement[] stackTrace = new RuntimeException().getStackTrace();
Enumeration<URL> urls = classLoader.getResources(FACTORIES_RESOURCE_LOCATION)
1. 通过classLoad获取所有扩展子类的对象2. 检测类型是否为扩展class的子类或实现类3. 根据参数获取初始化方法4. 实例化对象
流程差不多
SpringApplicationRunListeners.listeners
没有或者没有被使用就构建configurationProperties
@Import(AutoConfigurationPackages.Registrar.class)
@SpringBootApplication
this.mainApplicationClass = deduceMainApplicationClass()
不用内嵌启动,就不会存在servelt包
发布事件 - starting
this.applicationContextFactory.createEnvironment(this.webApplicationType);
new SpringApplication(primarySources).run(args);
将命令行输入参数合并到环境里commandLineArgs
loadSpringFactories(classLoaderToUse)
通过调用栈(debug那个调用)获取main主类即调用run的类
获取启动监听器
excludeFilters1. TypeExcludeFilter.class2. AutoConfigurationExcludeFilter.class
创建
其中一个spring boot自己的
properties读取
new SpringApplication(primarySources)
font color=\"#ec7270\
加载
environment.setConversionService(new ApplicationConversionService())
解析输入的参数
action.apply(font color=\"#ec7270\
this.webApplicationType = WebApplicationType.deduceFromClasspath();
ApplicationContextFactory::createEnvironment
setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
步骤
java.awt.headless
初始化转换服务
SpringApplicationRunListeners listeners = getRunListeners(args);
启动类变成List
最终的环境优先级:config - cmd -default
获取三种SPI扩展
DefaultPropertiesPropertySource.moveToEnd(environment);
根据导入的包判断启动类型
@Import(AutoConfigurationImportSelector.class)
都没有使用这个
NONE -> 基于servlet的web,但没有使用内嵌tomcat SERVLET-> 基于servlet的web,使用了内嵌tomcat REACTIVE -> 基于响应式开发的web
awt:页面组件
doWithListeners(\"spring.boot.application.starting\
this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
this.bootstrapRegistryInitializers.forEach((initializer) -> initializer.initialize(bootstrapContext));
获取classload
@EnableAutoConfiguration
注解
this.bootstrapRegistryInitializers = new ArrayList<>(getSpringFactoriesInstances(BootstrapRegistryInitializer.class));
font color=\"#ec7270\" style=\"\
ConfigurationPropertySources.attach(environment);
获取调用栈
new ApplicationEnvironment();
SpringFactoriesLoader.font color=\"#ec7270\
candidate
如果没有特殊设置默认使用DefaultApplicationContextFactory加载通过spi扩展获取类,调用创建环境方法如果有一个返回就直接返回了
获取
run(args)
@AutoConfigurationPackage
new DefaultApplicationArguments(args)
用的这里的数据
0 条评论
回复 删除
下一页