先看看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. 那些被刻意“阉割”的名人名言

    "天才是百分之一的灵感,百分之九十九的汗水",这句名言大家都知道的吧!不过还有好多人不知道的是这句名言还有后半句:"但百分之一的灵感甚至比百分之九十九的汗水更重要.&qu ...

  2. ubuntu 代理设置

    在学习工作中使用vagrant作为开发环境已经有很长一段时间了,使用ubuntu 作为开发系统 在使用中发现,即使修改了apt的source.list源文件,在面对一些开发中需要的软件工具的时候,不可 ...

  3. C++扬帆远航——14(求两个数的最大公约数)

    /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:gongyueshu.cpp * 作者:常轩 * 微信公众号:W ...

  4. HTML标签学习总结(1)

    1. <em>和<strong>标签是为了强调一段话中的关键字时使用,它们的语义是强调. 2. <span>标签是没有语义的,它的作用就是为了设置单独的样式用的. ...

  5. 2——PHP defined()函数

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  6. go语言指南之切片练习

    题目: 实现 Pic.它应当返回一个长度为 dy 的切片,其中每个元素是一个长度为 dx,元素类型为 uint8 的切片.当你运行此程序时,它会将每个整数解释为灰度值(好吧,其实是蓝度值)并显示它所对 ...

  7. iMX287A嵌入式Qt环境搭建

    目录 1.嵌入式Qt简介 2.查看开发板Qt库的版本 3.第一个嵌入式Qt程序--Hello World 4.Linux桌面版本Qt环境的搭建 5.注意 @ 1.嵌入式Qt简介 Qt 是一个跨平台的应 ...

  8. 前阿里数据库专家总结的MySQL里的各种锁(上篇)

    0.前言 MySQL按照加锁的范围,分为全局锁.表级锁.行级锁. 本文作为上篇,主要介绍MySQL的全局锁 和 表级锁. 重要的实战总结为,如何安全地变更一个表的表结构. 1.全局锁 定义: 全局锁就 ...

  9. redis01

    1.redis 1)cookie与session session本质上也是cookie,cookie携带session返回给服务端 redis是一个存储数据库 redis读写快速,使用简单,常用于存储 ...

  10. 2,Java中的数据结构

    1,字符串(String) ···String为特殊的引用类型,不可变. ···常用实例方法:     获取子串:substring(start, end);     获取索引:indexOf(cha ...