SpringApplication初始化
| SpringApplication: | |
| private void initialize(Object[] sources) { | |
| if (sources != null && sources.length > 0) { | |
| this.sources.addAll(Arrays.asList(sources)); | |
| } | |
| this.webEnvironment = deduceWebEnvironment(); | |
| // 从spring.factories里读取所有 ApplicationContextInitializer,并记入 SpringApplication | |
| setInitializers((Collection) getSpringFactoriesInstances( | |
| ApplicationContextInitializer.class)); | |
| // 从spring.factories里读取所有 ApplicationListener,并记入 SpringApplication | |
| setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class)); | |
| this.mainApplicationClass = deduceMainApplicationClass(); | |
| } | |
| public ConfigurableApplicationContext run(String... args) { | |
| StopWatch stopWatch = new StopWatch(); | |
| stopWatch.start(); | |
| ConfigurableApplicationContext context = null; | |
| FailureAnalyzers analyzers = null; | |
| configureHeadlessProperty(); | |
| // 从spring.factories里读取所有 SpringApplicationRunListener,监听springboot启动,参考:org.springframework.boot.context.event.EventPublishingRunListener | |
| SpringApplicationRunListeners listeners = getRunListeners(args); | |
| listeners.starting(); | |
| try { | |
| ApplicationArguments applicationArguments = new DefaultApplicationArguments( | |
| args); | |
| ConfigurableEnvironment environment = prepareEnvironment(listeners, | |
| applicationArguments); | |
| Banner printedBanner = printBanner(environment); | |
| // web环境下默认的 ApplicationContext: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext | |
| // 非web环境下默认的 ApplicationContext: org.springframework.context.annotation.AnnotationConfigApplicationContext | |
| context = createApplicationContext(); | |
| analyzers = new FailureAnalyzers(context); | |
| // org.springframework.cloud.bootstrap.config.PropertySourceBootstrapProperties 会通过 ApplicationContextInitializer,准备 PropertySource | |
| // PropertySourceBootstrapProperties 收集 PropertySourceLocator 来获得PropertySource | |
| // 其中 org.springframework.cloud.config.client.ConfigServicePropertySourceLocator 是 Cloud Config Client 提供的 PropertySourceLocator | |
| prepareContext(context, environment, listeners, applicationArguments, | |
| printedBanner); | |
| // 调用 context.refresh | |
| refreshContext(context); | |
| afterRefresh(context, applicationArguments); | |
| listeners.finished(context, null); | |
| stopWatch.stop(); | |
| if (this.logStartupInfo) { | |
| new StartupInfoLogger(this.mainApplicationClass) | |
| .logStarted(getApplicationLog(), stopWatch); | |
| } | |
| return context; | |
| } | |
| catch (Throwable ex) { | |
| handleRunFailure(context, listeners, analyzers, ex); | |
| throw new IllegalStateException(ex); | |
| } | |
| } |
SpringApplication初始化的更多相关文章
- SpringBoot启动流程分析(一):SpringApplication类初始化过程
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...
- springboot源码解析 - 构建SpringApplication
1 package com.microservice.framework; 2 3 import org.springframework.boot.SpringApplication; 4 impor ...
- Spring Boot 2.0系列文章(七):SpringApplication 深入探索
关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/30/springboot_SpringApplication/ 前言 在 Spring B ...
- Spring Boot 启动(一) SpringApplication 分析
Spring Boot 启动(一) SpringApplication 分析 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html ...
- 【附3】springboot源码解析 - 构建SpringApplication
package com.microservice.framework; import org.springframework.boot.SpringApplication; import org.sp ...
- 附3 springboot源码解析 - 构建SpringApplication
package com.microservice.framework; import org.springframework.boot.SpringApplication; import org.sp ...
- SpringBoot SpringApplication底层源码分析与自动装配
目录 抛出问题 @SpringBootApplication注解剖析 SpringApplication类剖析 第一步:配置SpringBoot Bean来源 第二步 :自动推断SpringBoot的 ...
- SpringBoot源码分析之---SpringBoot项目启动类SpringApplication浅析
源码版本说明 本文源码采用版本为SpringBoot 2.1.0BUILD,对应的SpringFramework 5.1.0.RC1 注意:本文只是从整体上梳理流程,不做具体深入分析 SpringBo ...
- SpringBoot源码修炼—系统初始化器
SpringBoot源码修炼-系统初始化器 传统SSM框架与SpringBoot框架简要对比 SSM搭建流程 缺点: 耗时长 配置文件繁琐 需要找合适版本的jar包 SpringBoot搭建流程 优点 ...
随机推荐
- Mysql5.7初始化成空密码或随机密码的方式
命令在此:mysqld --initialize-insecure --user=mysql 文档表明,使用-initialize生成随机密码,使用-initialize-insecure生成空密码. ...
- Android 手把手带你玩转自己定义相机
本文已授权微信公众号<鸿洋>原创首发,转载请务必注明出处. 概述 相机差点儿是每一个APP都要用到的功能,万一老板让你定制相机方不方?反正我是有点方. 关于相机的两天奋斗总结免费送给你. ...
- Android——开机自启动app
android在开机完成后会发送一个android.intent.action.BOOT_COMPLETED的广播,告诉系统内app们已经开机. 我们可以在需要开机自启动的app中定义一个广播接收器, ...
- Knockout学习之表单绑定器(下)
“hasFocus”绑定 hasFocus绑定器会将DOM元素的焦点状态与视图模型中的属性相关联,当你设置视图模型中关联的属性为true或false后,将能够设置关键的DOM元素是否获得焦点. 比如下 ...
- 如何使用 MSBuild.exe 生成解决方案中的特定目标
以前都是直接使用VS或者msbuild生成整个解决方案,或者只构建单个工程. 这回使用msbuild构建单个工程的时候出现了问题,因为工程中使用了SolutionDir这个宏来定位第三方库路径. 对于 ...
- kibana对logstash监控获取不到数据
需求: kibana监控elasticsearch+kibana+logstash的性能寻找,性能瓶颈! 发现启动logstash加载logstash.yml,不读取配置好的xpack.monitor ...
- Gerrit最简工作流
Gerrit最简工作流: git clone ... //注意clone with commit-msg hook,否则push可能失败(ERROR: missing Change-Id in c ...
- android 用代码画虚线边框背景
1.虚线画效果,可以使用Android中的xml来做. 2.直接上代码: <RelativeLayout android:id="@+id/coupon_ ...
- List集合去重的一些方法(常规遍历、Set去重、java8 stream去重、重写equals和hashCode方法)
1. 常规元素去重 碰到List去重的问题,除了遍历去重,我们常常想到利用Set集合不允许重复元素的特点,通过List和Set互转,来去掉重复元素. // 遍历后判断赋给另一个list集合,保持原来顺 ...
- db_table--Spring Security3.1 最新配置实例
2011-04-28 这几天学习了一下Spring Security3.1,从官网下载了Spring Security3.1版本进行练习,经过多次尝试才摸清了其中的一些原理.本人不才,希望能帮助大家. ...