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搭建流程 优点 ...
随机推荐
- Hessian 原理分析
Hessian 原理分析 一.远程通讯协议的基本原理 网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http . tcp . u ...
- Definitaion of 'utsname' must be imported from module 'Darwin.POSIX.sys.utsname' before it is required
https://stackoverflow.com/questions/34430354/objective-c-gettimeofday-must-be-imported
- nano在CentOS上的安装和使用
安装: yum -y install nano 打开新建:nano 路径+文件名 查看用:cat path/filename如果改文件存在,上面的命令将打开这个文件:如果文件不存在则将会创建一个新文件 ...
- 单链表Java实现
近期在复习基本数据结构,本文是单链表的Java实现,包含对单链表的实现插入删除查找遍历等.最后还实现了单链表的逆置. 实现了多项式相加,多项式相乘. 原文章及完整源码在这里 http://binhua ...
- C++11中的mutex, lock,condition variable实现分析
本文分析的是llvm libc++的实现:http://libcxx.llvm.org/ C++11中的各种mutex, lock对象,实际上都是对posix的mutex,condition的封装.不 ...
- python模块之HTMLParser抓页面上的所有URL链接
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之HTMLParser抓页面上的所有URL链接 import urllib #MyParse ...
- 由一次 symbol lookup error 引发的思考
开发一个跨平台的项目的时候,大部分时候都是在VS下进行编码,所以也就使用了VS的解决方案来管理项目. 因为要跨平台,当时网上看scons这个工具不错,所以在linux下就使用了scons来作为编译脚本 ...
- VS2015安装ASP.NET MVC4
http://www.microsoft.com/zh-cn/download/details.aspx?id=44533 下载安装 AspNetMVC4.msi
- Kettle7.1在window启动报错
实验环境: window10 x64 kettle7.1 pdi-ce-7.1.0.0-12.zip 错误现象: a java exception has occurred 问题解决: 运行调试工具 ...
- Region使用全解
代码地址如下:http://www.demodashi.com/demo/14799.html 前言 Region,即为区域,它表示的是canvas图层上的某一块封闭的区域.很多时候,我们会利用Reg ...