SpringBoot(2):运行原理
一. pom.xml

进入父项目,这里才是真正管理SpringBoot应用里面所有依赖版本的地方,SpringBoot的版本控制中心;以后我们导入依赖默认是不需要写版本;但是如果导入的包没有在依赖中管理着就需要手动配置版本了

二. 启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
springboot-boot-starter:就是spring-boot的场景启动器;SpringBoot将所有的功能场景都抽取出来,做成一个个 starter(启动器),只需要在项目中引入这些starter即可,所有相关的依赖都会导入进来,我们要用什么功能就导入什么样的场景启动器即可
这里的 spring-boot-starter-web 帮我们导入了web模块正常运行所依赖的组件
三. 主程序
1 import org.springframework.boot.SpringApplication;
2 import org.springframework.boot.autoconfigure.SpringBootApplication;
3
4 //@SpringBootApplication 来标注一个主程序类 , 说明这是一个Spring Boot应用
5 @SpringBootApplication
6 public class SpringbootDemo01Application {
7
8 public static void main(String[] args) {
9 //将Spring应用启动起来
10 SpringApplication.run(SpringbootDemo01Application.class, args);
11 }
12
13 }
四. @SpringBootApplication
SpringBootApplication:SpringBoot应用
@SpringBootApplication:SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用
进入@SpringBootApplication
有三个重要的注解:@ComponentScan;@SpringBootConfiguration;@EnableAutoConfiguration

1. @ComponentScan
ComponentScan:组件扫描

这个注解在Spring中很重要,它对应XML配置中的元素。@ComponentScan的功能就是自动扫描并加载符合条件的组件或者bean,将这个bean定义加载到IOC容器中
2. @SpringBootConfiguration
SpringBootConfiguration:SpringBoot配置

SpringBoot的配置类;标注在某个类上;表示这是一个SpringBoot的配置类
进入@SpringBootConfiguration

3. @EnableAutoConfiguration
EnableAutoConfiguration:自定义配置

@EnableAutoConfiguration告诉SpringBoot开启自动配置功能,这样自动配置才能生效
进入@EnableAutoConfiguration
我们看看 @AutoConfigurationPackage 和 AutoConfigurationImportSelector

先进入@AutoConfigurationPackage
AutoConfigurationPackage:自动配置程序包

@import :Spring底层注解@import ,给容器中导入一个组件 ,导入的组件由 {Registrar.class} 将主配置类 【即@SpringBootApplication标注的类】的所在包及包下面所有子包里面的所有组件扫描到Spring容器
再进入AutoConfigurationImportSelector
AutoConfigurationImportSelector:自动配置导入选择器
@Import({AutoConfigurationImportSelector.class}):给容器导入组件;它将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中;它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration),就是给容器中导入这个场景需要的所有组件,并配置好这些组件
找到SpringFactoriesLoader,进入查看
发现一个配置文件 : META-INF/Spring.factories 的文件

五. spring.factories的配置文件
这里有很多自动配置的文件;这就是自动配置根源所在

SpringBoot在启动的时候从类路径下的 META-INF/spring.factories 中获取 @EnableAutoConfiguration 指定的值,将这些值作为自动配置类导入容器,自动配置类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东西,自动配置类都帮我们解决了
SpringBoot(2):运行原理的更多相关文章
- SpringBoot:运行原理探究
		
西部开源-秦疆老师:基于SpringBoot 2.1.6 的博客教程 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! SpringBoot ...
 - springboot 的运行原理?
		
一.@SpringbootApplicaion 是一个组合注解? 在注解中点击查看. 作用:实现自动配置. /* * springboot的运行原理 1. @SpringbootApplicatio ...
 - springboot(运行原理参考借鉴)
		
什么是springboot答:Spring Boot makes it easy to create stand-alone, production-grade Spring based Applic ...
 - SpringBoot的运行原理
		
SpringBoot关于自动配置的源码在spring-boot-autoconfigure-xxxxx.jar中 <源码解析> 查看当前项目中已启用的和未启用的自动配置的报告的三种方法: ...
 - SpringBoot学习——运行原理学习及自定义Starter pom
		
例如:pom文件 导入redis jar包 springboot怎么识别和集成? https://blog.csdn.net/flygoa/article/details/68484439 https ...
 - SpringBoot启动过程原理
		
最近这两年springboot突然火起来了,那么我们就来看看springboot的运行原理. 一.springboot的三种启动方式: 1.运行带有main方法的2.通过命令 Java -jar命令3 ...
 - Spring boot运行原理-自定义自动配置类
		
在前面SpringBoot的文章中介绍了SpringBoot的基本配置,今天我们将给大家讲一讲SpringBoot的运行原理,然后根据原理我们自定义一个starter pom. 本章对于后续继续学习S ...
 - 狂神说SpringBoot02:运行原理初探
		
狂神说SpringBoot系列连载课程,通俗易懂,基于SpringBoot2.2.5版本,欢迎各位狂粉转发关注学习. 微信公众号:狂神说(首发) Bilibili:狂神说Java(视频) 未经作 ...
 - springboot深入学习(二)-----profile配置、运行原理、web开发
		
一.profile配置 通常企业级应用都会区分开发环境.测试环境以及生产环境等等.spring提供了全局profile配置的方式,使得在不同环境下使用不同的applicaiton.properties ...
 - springBoot 自动配置原理
		
在之前文章中说过,springBoot会根据jar包去添加许多的自动配置,本文就来说说为什么会自动配置,自动配置的原理时什么? springBoot在运行SpringApplication对象实例化时 ...
 
随机推荐
- Git基本教程
			
git的发展 Git 两周开发 Linus开发,主要是为了管理大量人员维护代码 Git分布式版本控制系统 基本命令 history:查看之前用过的命令 vimtutor git配置 查看配置 git ...
 - 使用silky脚手架构建微服务应用
			
目录 模板简介 构建独立应用的模板Silky.App.Template 构建模块化应用的模板Silky.Module.Template 开源地址 在线文档 模板简介 使用 dotnet new 命令可 ...
 - 设计模式学习-使用go实现装饰模式
			
装饰器模式 定义 代码实现 优点 缺点 适用范围 装饰器模式和桥接模式的区别 参考 装饰器模式 定义 装饰模式:动态的给一些对象添加额外的职责,就增加功能来说,装饰模式比生成子类更灵活. 举个栗子: ...
 - Django 小实例S1 简易学生选课管理系统 6 实现登录逻辑
			
Django 小实例S1 简易学生选课管理系统 第6节--实现登录逻辑 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 1 业务逻辑 本教程第四节里 ...
 - [luogu4607]反回文串
			
参考ARC064F 令$h(n)=\begin{cases}n(n为奇数)\\\frac{n}{2}(n为偶数)\end{cases}$,$f(n)$定义与ARC064F相同,答案即$\sum_{d| ...
 - npm 配置 registry 以及使用 nrm
			
由于众所周知的原因,我们的内网链接互联网时非常不稳定,速度慢而且经常下载失败.为了提高下载安装 npm 包的体验,很多人都会把 npm 的 registry 配置成国内镜像,我们一般用的比较多的就是淘 ...
 - Codeforces 702F - T-shirts(平衡树+势能分析)
			
题面传送门 首先肯定将所有物品排个序. 考虑暴力做法,对于每个询问,枚举所有物品,能买就买.不过扫一眼就知道无法直接优化. 不妨换个角度,暴力做法是枚举询问,这次我们枚举物品.从左到右依次枚举所有物品 ...
 - Codeforces 306D - Polygon(随机化+乱搞)
			
Codeforces 题目传送门 & 洛谷题目传送门 中考终于结束了--简单写道题恢复下状态罢. 首先这一类题目肯定没法用一般的方法解决,因此考虑用一些奇淫的乱搞做法解决这道题,不难发现,如果 ...
 - intent.getSerializableExtra(转)
			
Activity之间通过Intent传递值,支持基本数据类型和String对象及它们的数组对象byte.byte[].char.char[].boolean.boolean[].short.short ...
 - 【机器学习与R语言】3-概率学习朴素贝叶斯(NB)
			
目录 1.理解朴素贝叶斯 1)基本概念 2)朴素贝叶斯算法 2.朴素贝斯分类应用 1)收集数据 2)探索和准备数据 3)训练模型 4)评估模型性能 5)提升模型性能 1.理解朴素贝叶斯 1)基本概念 ...