先看看SpringBoot的主配置类的main方法:

main方法运行了一个run()方法,进去run方法看一下:

/**
* 静态帮助程序,可用于从中运行{@link SpringApplication}
* 使用默认设置指定来源。
* @param primarySource加载的主要源
* @param args应用程序参数(通常从Java main方法传递)
* @返回正在运行的{@link ApplicationContext}
*/
public static ConfigurableApplicationContext run(Class<?> primarySource,
String... args) {
return run(new Class<?>[] { primarySource }, args);
}

我们可以看到run方法注释上写了使用了默认的设置,这些默认的设置就是从Application启动类上面的注解

@SpringBootApplication 中来的。

并且run方法返回了一个正在运行的上下文对象:

ApplicationContext

进入注解@SpringBootApplication中可以看到:

注解中默认的四个方法不用关注。

先看看@ComponentScan 这个注解,它是当容器启动的时候,用来扫描启动类底下所有的类以及所有子包下面的类。

再看看@SpringBootConfiguration这个注解,可以看到它是一个接口,上面有一个@Configuration注解,说明它是一个容器。

从Spring3.0开始,@Configuration用于定义配置类,可替换xml配置文件,@Configuation等价于<Beans></Beans>。

接着看@EnableAutoConfiguration,这是用来开启自动装配的注解。

进入@EnableAutoConfiguration,看到一个@Import,点进去看,注释说明这是用来导入@Configuration的。

@Import的入参  AutoConfigurationImportSelector.class是一个选择器(Selector),用于选择自动装配的类。

进入选择器AutoConfigurationImportSelector,可以看到它调用了一个获取自动装配实体的方法:

getAutoConfigurationEntry

进入获取自动装配实体的方法( getAutoConfigurationEntry ),可以看到它调用了一个获取默认配置的方法,返回值是一个字符串列表。这里把它成为:默认的配置列表。

进入getCandidateConfigurations方法中,通过断言可以知道配置信息是从

META-INF/spring.factories

中来的。最终它们是一个字符串类型的List。

通过IDEA软件的定位功能,可以找到当前方法getCandidateConfigurations所在jar包。

打开spring.factories文件,可以看到springBoot为用户实现的大量自动装配的类:

找到 EmbeddedWebServerFactoryCustomizerAutoConfiguration ,可以看到SpringBoot为用户内置的Tomcat

最后看下spring.factories文件配置的自动装配类@ServletWebServerFactoryAutoConfiguration,在这里Tomcat被启动了。

SpringBoot怎么自动部署到内置的Tomcat的?的更多相关文章

  1. springboot学习笔记:6.内置tomcat启动和外部tomcat部署总结

    springboot的web项目的启动主要分为: 一.使用内置tomcat启动 启动方式: 1.IDEA中main函数启动 2.mvn springboot-run 命令 3.java -jar XX ...

  2. Windows Azure 自动伸缩已内置

     WindowsAzure平台提供的主要优点之一是能够在有需要时快速缩放云中的应用程序以响应波动.去年7月以前,您必须编写自定义脚本或使用其他工具(如Wasabi或MetricsHub)来启用自动 ...

  3. python基础-requests模块、异常处理、Django部署、内置函数、网络编程

     网络编程 urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应. 校验返回值,进行接口测试: 编码:把一个Python对象编码转 ...

  4. SpringBoot(十四)_springboot使用内置定时任务Scheduled的使用(一)

    为什么使用定时? 日常工作中,经常会用到定时任务,比如各种统计,并不要求实时性.此时可以通过提前设置定时任务先把数据跑出来,后续处理起来更方便. 本篇文章主要介绍 springboot内置定时任务. ...

  5. Spring Boot 定制与优化内置的Tomcat容器

    1.Spring Boot定制与优化内置Tomcat容器. > 内置的容器有三个分别是Undertow.Jetty.Tomcat,Spring Boot 对这三个容器分别进行了实现,它们上层接口 ...

  6. 使用Maven自动部署Java Web应用到Tomcat服务器

    学习如何使用Maven,我推荐一本工具书,<maven the definitive guide>.在这本工具书手中,详细介绍了maven的使用思想,并且提供了从基本到复杂的具体项目应用. ...

  7. 使用Maven自动部署Java Web项目到Tomcat问题小记

    导读 首先说说自己为啥要用maven管理项目,一个直接的原因是:我在自己电脑上开发web项目,每次部署到服务器上时都要经历如下步骤: 首先在Eclipse里将项目打包成war包 将服务器上原来的项目文 ...

  8. spring boot修改内置容器tomcat的服务端口

    方式一 在spring boot的web 工程中,可以使用内置的web container.有时需要修改服务端口,可以通过配置类和@Configuration注解来完成. // MyConfigura ...

  9. 阻止YII 1.0自动加载内置JQUERY库

    有些时候我们会在项目中用到很多js库, 因为Yii 1.0框架会默认自动加载一些自带核心库, 很容易引起冲突问题, 下面的代码就展示了如何在Yii 1.0框架下取消jQuery自动加载. Open C ...

随机推荐

  1. 当鼠标hover的时候,使用tip将overflow:hidden隐藏的文字显示完全

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. 为何滴滴会走Uber之路,研发无人驾驶?

    近日,滴滴出行宣布完成新一轮超过55亿美元融资,以支持其全球化战略的推进和前沿技术领域的投资.其中,无人驾驶汽车将是这笔资金重要的投资方向.此前,滴滴在全球范围内的追赶对象Uber不断在无人汽车领域发 ...

  3. .NET Core 获取程序运行环境信息与反射的应用

    目录 RuntimeInformation.Environment 获取信息 反射获取信息 获取某个属性的值以及别名 反射获取信息 使用 总结 笔者的九篇反射系统文章已经完结,但是笔者会持续更新反射在 ...

  4. C:数组习题

    与字符串处理有关的函数: 头文件:<stdio.h>    gets().puts() 头文件:<string.h> (1).字符串长度测量函数  :strlen(字符数组名) ...

  5. Filter过滤器Listener:监听器

    Filter过滤器 1. 概念 web中的过滤器:当访问服务器资源是,过滤器可以将请求拦截下来,完成一些特殊功能: 过滤器的作用 完成通用的操作:例如登录验证.统一编码处理.敏感字符过滤... 快速入 ...

  6. 实用的Python(3)超简单!基于Python搭建个人“云盘”

    1 简介 当我们想要从本地向云服务器上传文件时,比较常用的有pscp等工具,但避免不了每次上传都要写若干重复的代码,而笔者最近发现的一个基于Python的工具updog,可以帮助我们在服务器上搭建类似 ...

  7. Spring,SpringMVC,MyBatis,SSM配置文件比较

    Spring配置文件: applicationContext.xml applicationContext.xml是Spring的核心配置文件 IOC/DI,AOP相关配置都是在这个文件中 Sprin ...

  8. 7-45 jmu-python-涨工资 (10 分)

    输入一组工资数据,写入列表.对于小于5000的工资,涨1.5倍.并输出涨后的工资数据. 输入格式: 数据之间空格隔开 输出格式: 涨工资后的数据,空格隔开.尾部 不带空格. 输入样例: 3000 40 ...

  9. MVC07

    1. 讲解ASP.net MVC的I/O操作 新建一个控制台程序,输入代码如下 using System; using System.IO; namespace IO { class Program ...

  10. Object-Oriented Programming Summary Ⅰ

    Part 0: 前言 令人闻风丧胆的OO还是来了.并没有像名字的外表一样可爱,简直就是恶魔. 疯狂压榨OS的时间,周末无法休息,互测狼人机制 虽然网上骂声很多,就算改进到9012年还是有很多不足的地方 ...