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搭建流程 优点 ...
随机推荐
- 转:初探nginx架构(一)
来源:http://tengine.taobao.org/book/chapter_02.html 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么nginx究竟是怎么样的呢? ...
- Python 入门必学的8个知识点
文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论
- SCD Type2 in ODI
缓慢变化维(Slowly changing Dimensions)指的是维表中的维度字段值会随着时间或业务调整,而在后续的分析中,历史数据仍然要使用旧的维度值,新的数据会使用当前维度值.在数据仓库建设 ...
- 令Django 视图有默认 login_required
方法一 from django.template import RequestContext from django.shortcuts import render_to_response from ...
- Selenium测试Ajax应用程序中的主要问题
主要的问题可能就是页面加载的问题,有时候页面没有加载成功导致对象找不到,从而导致脚本不能运行. 主要使用的方式是,在测试的全局中设置一个页面的加载时间,如果timeout就是没有找到对象.如下参考: ...
- V-rep学习笔记:Reflexxes Motion Library 2
VREP中的simRMLMoveToPosition函数可以将静态物体按照设定的运动规律移动到指定的目标位置/姿态.If your object is dynamically enabled, it ...
- Memcacher win7 安装测试
1.下载memcache 的windows 稳定版,解压放某个盘下面,比如在H:/wamp/www/php api/memcache: 2.在终端(即cmd 命令界面)下,输入安装命令 :H:/wam ...
- apache占用80端口,导致nginx启动不成功
把apache干掉,然后重启nginx就可以了
- C#几个小知识点
一.float数据类型 小数在C#中需要用浮点型表示,浮点值就是.后面的小数点.C#语言中有两种小数类型,分别为32位单精度浮点型(float) 和64位双精度浮点型(double).其中精度指的是小 ...
- Oracle的悲观锁和乐观锁
为了得到最大的性能,一般数据库都有并发机制,不过带来的问题就是数据访问的冲突.为了解决这个问题,大多数数据库用的方法就是数据的锁定. 数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁.什么叫 ...