Springboot之spring-boot模块

一、前言

spring-boot模块提供了一些特性用来支持springboot中其他模块,这些特性包含如下:

  • SpringApplication类提供了静态方法以便于写一个独立了spring应用程序,该类的主要职责是create和refresh一个合适的Spring 应用程序上下文(ApplicationContext)
  • 一流的外部配置的支持(application.properties)
  • 提供了便捷的应用程序上下文(ApplicationContext)的初始化器,以便在ApplicationContext使用前对其进行用户定制。
  • 给web应用提供了一个可选的web容器(目前有Tomcat或Jetty)

二、SpringBoot的启动

image.png

  • SpringApplication的构造函数里面会调用initialize方法在classpath的jar包里面查找META-INF/spring.factories,如果找到则看里面是否有配置ApplicationContextInitializer类型的bean,有则加载到SpringApplication的变量initializers里面存放,比如spring-boot.jar里面:

image.png

  • createAndRefreshContext做了下面几件事情:第一设置环境,加载application.properties等配置文件;第二根据classpath的jar里面是否有ConfigurableWebEnvironment判断当前是否需要创建web应用程序上下文,创建一个应用程序上下文;第三使用前面加载的应用程序初始化器对创建的应用程序上下文进行初始化;第四,刷新应用程序上下文解析bean定义到应用程序上下文里面的IOC容器。

三、 web容器的创建

image.png

  • 在应用程序上下文的refresh()流程中的onReresh()方法中创建了web容器
  • getBeanNamesForType获取了IOC容器中的EmbeddedServletContainerFactory类型的bean的name的集合,如果name集合为空或者与多个则抛出异常。还记得web容器工厂是通过自动配置注入到IOC的吧(https://www.jianshu.com/p/7be035004aca)。
  • 如果IOC里面只有一个web容器工厂bean则获取该bean的实例,然后调用该bean的getEmbeddedServletContainer获取web容器,这里假设web容器工厂为tomcat的,则创建tomcat容器并进行初始化。

四、总结

Spring-boot模块为其他模块提供了基础服务,例如装载了其它模块可能使用的配置项;应用程序上下文在使用前的用户定制;以及web容器的创建。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏丑胖侠

Zookeeper开源客户端Curator之Master/Leader选举

在实际生产中,特别是分布式系统中,我们经常遇到这样的场景:一个复杂的任务,近需要从分布式机器中选出一台机器来执行。诸如此类的问题,我们统称为“Master选举”...

448100
来自专栏PHP在线

PHP的错误机制总结

PHP的错误机制也是非常复杂的,做了几年php,也没有仔细总结过,现在就补上这一课。

25950
来自专栏人人都是极客

Linux 程序编译过程的来龙去脉

大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解...

28930
来自专栏公众号_薛勤的博客

深入理解Spring Boot数据源与连接池原理

在使用Spring Boot数据源之前,我们一般会导入相关依赖。其中数据源核心依赖就是spring‐boot‐starter‐jdbc 如下

2.1K30
来自专栏along的开发之旅

windows下chardet的安装

最近在读<<可爱的Python>>,CDays-1有个习题是:自动判定你自个儿/或是朋友的Blog 是什么编码的?

13460
来自专栏DOTNET

Entity Framework——配置文件设置

可以使用配置文件或代码(EF6起)配置EF框架。 一、使用配置文件 安装Entity Framework自动生成的配置 当使用VS的NuGet自动安装Entit...

35750
来自专栏Linux驱动

QT-第一个程序 Hello QT , 以及QT creator介绍

第一个程序 - Hello QT 首先写main.cpp: #include <QApplication> #include <QMainWindow> #in...

41870
来自专栏lgp20151222

4.0.3的mongodb 安装和java使用

由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面。

14620
来自专栏架构师之路

一分钟实现分布式锁

一、缘起 分布式环境下,多台机器上多个进程对一个数据进行操作,如果不做互斥,就有可能出现“余额扣成负数”,或者“商品超卖”的情况,如何实现简易分布式锁,对分布式...

42260
来自专栏我的博客

linux基本命令集锦

1. Cat命令 使用权限:所有使用者  使用方式:cat [-AbeEnstTuv] [–help] [–version] fileName  说明...

36170

扫码关注云+社区

领取腾讯云代金券