1、创建SpringApplication实例:
public SpringApplication(ResourceLoader resourceLoader, Class... primarySources) {
this.sources = new LinkedHashSet();
this.bannerMode = Mode.CONSOLE;
this.logStartupInfo = true;
this.addCommandLineProperties = true;
this.headless = true;
this.registerShutdownHook = true;
this.additionalProfiles = new HashSet();
this.resourceLoader = resourceLoader;
Assert.notNull(primarySources, "PrimarySources must not be null");
this.primarySources = new LinkedHashSet(Arrays.asList(primarySources));
this.webApplicationType = this.deduceWebApplicationType();
this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class));
this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class));
this.mainApplicationClass = this.deduceMainApplicationClass();
}
/META-INF/spring.factories 文件
# PropertySource Loaders
org.springframework.boot.env.PropertySourceLoader=\
org.springframework.boot.env.PropertiesPropertySourceLoader,\
org.springframework.boot.env.YamlPropertySourceLoader
# Run Listeners
org.springframework.boot.SpringApplicationRunListener=\
org.springframework.boot.context.event.EventPublishingRunListener
# Error Reporters
org.springframework.boot.SpringBootExceptionReporter=\
org.springframework.boot.diagnostics.FailureAnalyzers
# Application Context Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer,\
org.springframework.boot.context.ContextIdApplicationContextInitializer,\
org.springframework.boot.context.config.DelegatingApplicationContextInitializer,\
org.springframework.boot.web.context.ServerPortInfoApplicationContextInitializer
# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.ClearCachesApplicationListener,\
org.springframework.boot.builder.ParentContextCloserApplicationListener,\
org.springframework.boot.context.FileEncodingApplicationListener,\
org.springframework.boot.context.config.AnsiOutputApplicationListener,\
org.springframework.boot.context.config.ConfigFileApplicationListener,\
org.springframework.boot.context.config.DelegatingApplicationListener,\
org.springframework.boot.context.logging.ClasspathLoggingApplicationListener,\
org.springframework.boot.context.logging.LoggingApplicationListener,\
org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener
# Environment Post Processors
org.springframework.boot.env.EnvironmentPostProcessor=\
org.springframework.boot.cloud.CloudFoundryVcapEnvironmentPostProcessor,\
org.springframework.boot.env.SpringApplicationJsonEnvironmentPostProcessor,\
org.springframework.boot.env.SystemEnvironmentPropertySourceEnvironmentPostProcessor
# Failure Analyzers
org.springframework.boot.diagnostics.FailureAnalyzer=\
org.springframework.boot.diagnostics.analyzer.BeanCurrentlyInCreationFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.BeanNotOfRequiredTypeFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.BindFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.BindValidationFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.UnboundConfigurationPropertyFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.ConnectorStartFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.NoUniqueBeanDefinitionFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.PortInUseFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.InvalidConfigurationPropertyNameFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.InvalidConfigurationPropertyValueFailureAnalyzer
# FailureAnalysisReporters
org.springframework.boot.diagnostics.FailureAnalysisReporter=\
org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter
将传入的启动类"com.example.ms.DemoApplication"放入Set集合中
判断是否为Web环境:存在(javax.servlet.Servlet && org.springframework.web.context.ConfigurableWebApplicationContext )类则是
创建并初始化ApplicationInitializer列表 (spring.factories)
创建并初始化ApplicationListener列表 (spring.factories)
初始化主类mainApplicatioClass (DemoApplication)
2、启动run方法
public ConfigurableApplicationContext run(String... args) {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
ConfigurableApplicationContext context = null;
Collection<SpringBootExceptionReporter> exceptionReporters = new ArrayList();
this.configureHeadlessProperty();
SpringApplicationRunListeners listeners = this.getRunListeners(args);
listeners.starting();
Collection exceptionReporters;
try {
ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);
ConfigurableEnvironment environment = this.prepareEnvironment(listeners, applicationArguments);
this.configureIgnoreBeanInfo(environment);
Banner printedBanner = this.printBanner(environment);
context = this.createApplicationContext();
exceptionReporters = this.getSpringFactoriesInstances(SpringBootExceptionReporter.class, new Class[]{ConfigurableApplicationContext.class}, context);
this.prepareContext(context, environment, listeners, applicationArguments, printedBanner);
this.refreshContext(context);
this.afterRefresh(context, applicationArguments);
stopWatch.stop();
if (this.logStartupInfo) {
(new StartupInfoLogger(this.mainApplicationClass)).logStarted(this.getApplicationLog(), stopWatch);
}
listeners.started(context);
this.callRunners(context, applicationArguments);
} catch (Throwable var10) {
this.handleRunFailure(context, var10, exceptionReporters, listeners);
throw new IllegalStateException(var10);
}
try {
listeners.running(context);
return context;
} catch (Throwable var9) {
this.handleRunFailure(context, var9, exceptionReporters, (SpringApplicationRunListeners)null);
throw new IllegalStateException(var9);
}
}
创建计时器StopWatch
配置awt系统属性
获取SpringApplicationRunListeners
启动SpringApplicationRunListeners
创建ApplicationArguments
创建并初始化ConfigurableEnvironment
打印Banner
创建ConfigurableApplicationContext
准备ConfigurableApplicationContext
刷新ConfigurableApplicationContext
容器刷新后动作
SpringApplicationRunListeners发布finish事件
计时器停止计时
相关推荐
Spring Boot是一个基于Spring框架的开源Java平台,它简化了基于Spring的应用开发过程。在Spring Boot中,"快速入门"通常指的是新手或初学者对Spring Boot的基本认识和基础使用,能够快速构建和部署一个Spring Boot...
##### 一、Spring Boot文档概述 **1. 关于本文档** 本文档旨在帮助初学者快速掌握Spring Boot的基本操作与核心概念,适合那些希望迅速上手Spring Boot项目的新手。 **2. 获取帮助** 对于学习过程中遇到的问题,...
#### Spring Boot 框架概述 Spring Boot 是由 Pivotal 团队提供的全新框架,旨在简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式(习惯优于配置)来简化整个 Spring 应用的配置。Spring Boot 的...
以上只是《Spring Boot参考指南》中部分内容的概述,实际指南会包含更多关于如何使用Spring Boot创建、配置和管理应用的详细指导,包括Spring Boot与其他技术(如Spring Cloud、MyBatis、MongoDB等)的集成,以及...
Spring Boot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它集成了大量的常用功能,如自动配置、内嵌Servlet容器、健康检查、Actuator等,极大地提高了开发效率。 二、Vue3概述 Vue3...
Spring Boot是基于Spring框架的一个项目,目的是简化新Spring应用的初始搭建以及开发过程。它使用"约定优于配置"的原则,提供了大量默认配置,减少了项目配置的复杂性。Spring Boot的核心特性包括自动配置、起步依赖...
### Spring Boot 参考指南知识点概述 #### 一、Spring Boot 文档概览与入门 **1. 关于文档** - **版本说明**:该文档版本为 1.2.5.RELEASE,由 Phillip Webb、Dave Syer、Josh Long 等多位专家共同编撰。 - **...
### Spring Boot 入门开发知识点概述 #### 一、Spring Boot 基本介绍 - **微服务架构**:在现代软件开发中,微服务架构是一种流行的设计模式,它将单个应用程序分解为一组小型、独立的服务,每个服务执行特定的...
Spring Boot是Java EE开发领域的一股强大力量,它简化了传统的Java企业级应用的配置和启动过程,被誉为“JavaEE的颠覆者”。这个压缩包包含的“JavaEE颠覆者spring-boot实战源码”提供了丰富的示例和实战教程,帮助...
### Spring Boot 技术培训知识点概述 #### 一、Spring Boot 入门 ##### 1.1 Spring Boot 简介 Spring Boot 是基于 Spring 平台和一系列框架的项目,旨在简化新 Spring 应用程序的初始设置和配置。Spring Boot 的...
### Spring Boot概述与优势 #### 一、Spring Boot简介 Spring Boot是由Pivotal团队提供的一个开源Java框架,它的核心目标是简化Spring应用的搭建和开发过程。通过大量的默认配置和自动化配置机制,Spring Boot极大...
Spring Boot提供了丰富的测试支持,包括`@SpringBootTest`用于启动整个Spring Boot应用进行集成测试,`@WebMvcTest`用于只启动Web层进行Controller测试,`@DataJpaTest`用于JPA数据访问层的测试等。 9. **日志** ...
Spring Boot是Java开发领域的一款非常流行的微服务框架,它简化了Spring应用的初始搭建以及开发过程。Spring Boot的核心设计理念是“约定优于配置”,通过提供预配置的starter来快速构建应用程序。下面,我们将深入...
**Spring Boot 2** 是基于流行的 Java 开发框架 Spring 的一个子项目,旨在简化新 Spring 应用程序的初始设置和开发过程。它通过提供默认配置来减少搭建项目的复杂性,并且能够快速启动和运行。Spring Boot 2 支持...
### Spring Boot 参考指南知识点概述 #### 一、Spring Boot 文档概览 - **文档定位**:本文档旨在全面介绍Spring Boot的功能与使用方式,面向初学者及具有一定经验的开发者。 - **获取帮助**:提供多种渠道帮助...
### Spring Boot参考指南知识点概述 #### 一、Spring Boot 文档概述 - **关于本文档**:本指南旨在提供Spring Boot全面的使用手册,适用于初学者到进阶开发者。 - **获取帮助**:介绍了如何获得Spring Boot相关的...
- **目标**:Spring Boot的目标是让开发者能够快速启动Spring项目,并通过自动配置减少样板代码的编写,提高开发效率。 - **适用场景**:适用于构建微服务、Web应用、数据处理应用等。 #### 2. **Spring Boot的...
- **简明概述**:Spring Boot 通过提供预配置来减少项目搭建的时间,并且简化了部署流程,使得开发者可以更加专注于应用程序的核心功能。 #### 二、Spring Boot 基础 1. **简介** - Spring Boot 提供了一种快速...
Spring Boot简化了Spring的应用启动和配置,使得开发过程更加高效。在这个项目中,我们将探讨Spring Boot的核心特性以及如何利用它来开发Web应用。 1. Spring Boot概述:Spring Boot是由Pivotal Team创建的,其目标...
1.1 Spring Boot简介:Spring Boot是由Pivotal团队提供的全新框架,其设计目标是简化Spring应用程序的初始搭建以及开发过程。它通过提供“起步依赖”(Starter POMs)来自动配置Spring框架,使得开发者能够快速构建...