【SpringBoot】03 自动装配原理探索
SpringBoot的依赖探索
首先是一个父级依赖管理的pom.xml

【Ctrl + 左键点击】访问进去之后还有父级的父级

到最后才是我们的真正的顶级父类Pom.xml

我们当前的父级坐标
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
第二级坐标
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.7.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
最后才是Boot依赖
顶级父类管理了所有依赖的版本,
实际导入依赖只需要声明具体的包即可
次级目录负责了资源导出过滤

启动器:
启动被拆分成各个单元模块
回想SSM的启动
- Main写类实现
- Test写单元测试类
- 服务启动Tomcat

主程序:
@SpringBootApplication 标注这个类是一个SpringBoot的应用
就跟MVC的@Component差不多,注册

我们可以点击查看这个注解类

@SpringBootConfiguration
又是由一个@Configuration来配置

追到最后就是一个@Component注解,

也就是说SpringBoot的本质还是一个Spring,
但是是一个纯注解的Spring【不再是繁琐的XML配置了】
@EnableAutoConfiguration 顾名思义【开启自动配置】

@AutoConfigurationPackage
自动配置包
被@Import({Registrar.class}) 注解,也就是包注册扫描
看不下去了,总而言之就是通过这些注解对整个工程进行了一个
地毯式的注册配置,全部加载进了Properties,配合启动器完成运行
我们要做的就是配置启动器
https://www.bilibili.com/video/BV1PE411i7CV?t=2222&p=6
2020.08.17更新:

在SpringBoot自动配置这个Jar包中,提供了一个Spring工厂配置文件
里面的信息就和properties一样,有键和值组成,分为了这些:
# Initializers 初始化加载器 # Application Listeners 应用监听器 # Auto Configuration Import Listeners 自动配置导入 监听器 # Auto Configuration Import Filters 自动配置导入 过滤器 # Auto Configure 自动配置 # Failure analyzers 故障分析器 # Template availability providers 可用的模版供应者
重点部分在自动配置的值上面,一共配置了126个值,即表示了SpringBoot具有126个资源的自动配置
这也就表示其实和Spring读取XML配置信息创建Bean实例是一个道理
但是加载这些自动配置类资源需要提供SpringBoot对应的启动器starter,自动装配才会生效
在尚硅谷的教程细谈:
https://www.bilibili.com/video/BV1gW411W76m?t=190&p=19
官方文档的配置文件参数详细说名
https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#common-application-properties
头部导航锚标签连接位置传送

自动装配原理:
- SpringBoot启动时加载主配置类,开启了自动配置功能@EnableAutoConfiguration
- @EnableAutoConiguration作用:
1、利用EnableAutoConigurationImportSelector给容器导入组件
2、可以查看SelectImport方法的内容
3、List<String>Configurations = getCandicateConfiguration(annotationMetaData,attribute)获取候选配置
【SpringBoot】03 自动装配原理探索的更多相关文章
- 【springboot】自动装配原理
摘自:https://mp.weixin.qq.com/s/ZxY_AiJ1m3z1kH6juh2XHw 前言 Spring翻译为中文是"春天",的确,在某段时间内,它给Java开 ...
- SpringBoot启动流程分析(五):SpringBoot自动装配原理实现
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...
- SpringBoot自动装配原理解析
本文包含:SpringBoot的自动配置原理及如何自定义SpringBootStar等 我们知道,在使用SpringBoot的时候,我们只需要如下方式即可直接启动一个Web程序: @SpringBoo ...
- Eureka 系列(03)Spring Cloud 自动装配原理
Eureka 系列(03)Spring Cloud 自动装配原理 [TOC] 0. Spring Cloud 系列目录 - Eureka 篇 本文主要是分析 Spring Cloud 是如何整合 Eu ...
- springboot自动装配原理
最近开始学习spring源码,看各种文章的时候看到了springboot自动装配实现原理.用自己的话简单概括下. 首先打开一个基本的springboot项目,点进去@SpringBootApplica ...
- springboot自动装配原理,写一个自己的start
springboot自动装配原理 第一次使用springboot的时候,都感觉很神奇.只要加入一个maven的依赖,写几行配置,就能注入redisTemple,rabbitmqTemple等对象. 这 ...
- SpringBoot | 2.1 SpringBoot自动装配原理
@ 目录 前言 1. 引入配置文件与配置绑定 @ImportResource @ConfigurationProperties 1.1 @ConfigurationProperties + @Enab ...
- 【Springboot】Springboot自动装配原理
1.核心注解就是 EnableAutoConfiguration 该注解会激活SpringBoot的自动装配功能: 代码如下: @Target(ElementType.TYPE) @Retentio ...
- 深入理解SpringBoot之自动装配
SpringBoot的自动装配是拆箱即用的基础,也是微服务化的前提.其实它并不那么神秘,我在这之前已经写过最基本的实现了,大家可以参考这篇文章.这次主要的议题是,来看看它是怎么样实现的,我们透过源代码 ...
- Spring Boot系列(二):Spring Boot自动装配原理解析
一.Spring Boot整合第三方组件(Redis为例) 1.加依赖 <!--redis--> <dependency> <groupId>org.springf ...
随机推荐
- c# 语音识别 | 智能对话
在.NET4.0中,我可以借助System.Speech组件让电脑来识别我们的声音. 以上,当我说"name",显示"Darren",我说"age&q ...
- 抖音abogus逆向分析
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...
- 内置对象Date
// 内置对象 Date 时间对象 // 可以通过 内置对象 data来获取和存储时间 // 使用方式步骤 // 1,创建时间对象 // ...
- 剑指Offer-48.不用加减乘除做加法(C++/Java)
题目: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 分析: 将加法还原成最原始的计算方法,也就是分别计算进位和非进位的和,最后再将这两部分合起来,便是和.我们可以利 ...
- 通过 Canal 将 MySQL 数据实时同步到 Easysearch
Canal 是阿里巴巴集团提供的一个开源产品,能够通过解析数据库的增量日志,提供增量数据的订阅和消费功能.使用 Canal 模拟成 MySQL 的 Slave,实时接收 MySQL 的增量数据 bin ...
- 将MP4(视频)转换为MP3(音频)
使用VLC Media Player 步骤1. 在计算机上启动VLC Media Player,点击「媒体」并选择「转换/储存」. 步骤2. 点击「加入」以浏览并打开MP4文件,然后点击「Conver ...
- 暴走漫画系列之高仿淘宝收货地址(附demo)
引语: 我是个程序猿,一天我坐在路边一边喝水一边苦苦检查bug. 这时一个乞丐在我边上坐下了,开始要饭,我觉得可怜,就给了他1块钱. 然后接着调试程序.他可能生意不好,就无聊的看看我在干什么,然后过了 ...
- python3读csv文件,出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: invalid con
使用csv.reader(file)读csv文件时,出现如下错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in positio ...
- C++之printf函数
背景 C++中可以使用cout来输出. 但是cout输出一些格式化的数据非常麻烦. 比如: hour,min和sec代表当前时间,需求:按12:00:00格式输出当前时间. //使用cout输出 co ...
- CLR via C# 笔记 -- 特性(18)
1. 特性继承自System.Attribute,能作用于TypeDef(类.结构.枚举.接口和委托),MethodDef(含构造器),ParamDef,FieldDef,PropertyDef,Ev ...