IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 学习springboot2的第5天(2021-12-04)13-自动配置【源码分析】自动包规则原理 -> 正文阅读

[Java知识库]学习springboot2的第5天(2021-12-04)13-自动配置【源码分析】自动包规则原理

学习springboot2的第5天(2021-12-04)13-自动配置【源码分析】自动包规则原理

【springboot自动配置原理的入门】

springboot到底是怎么神不知鬼不觉地帮我们做了很多事情。只让我们关注业务逻辑的开发。带着这个问题开始学习。

【核心注解】:
@SpringBootApplication
这个注解一般是在启动程序类的类体上。
在这里插入图片描述
其中@SpringBootApplication这个注解等同于:下面三个注解(1=3)
1、@SpringBootConfiguration
2、@ComponentScan
3、@EnableAutoConfiguration

首先将第一个注解@SpringBootConfiguration

在这里插入图片描述
发现注解@SpringBootConfiguration它就是一个配置的注解。
之前学习过。
代表当前这个MainApplication类也是springboot的一个配置类。
在这里插入图片描述

2、@ComponentScan

这个注解就是包扫描。
【这个详细知识在学习spring的视频里面有详细讲解ComponentScan 】

3、@EnableAutoConfiguration(核心注解)

这个注解很重要。
这个注解是由
1、@AutoConfigurationPackage
2、@Import({AutoConfigurationImportSelector.class})
这两个注解合成的。

3.1、@AutoConfigurationPackage

在这里插入图片描述

发现注解@AutoConfigurationPackage其实就是Import
就是给容器导入组件:@Import({Registrar.class})
这个组件就是Registrar.class
这个Registrar.class组件的作用是什么呢?
点击看Registrar类的代码:

	static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {

		@Override
		public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
			register(registry, new PackageImports(metadata).getPackageNames().toArray(new String[0]));
		}

		@Override
		public Set<Object> determineImports(AnnotationMetadata metadata) {
			return Collections.singleton(new PackageImports(metadata));
		}

	}

发现它有两个方法:
在这里插入图片描述

利用Registrar给容器批量注册一系列组件。

因为如果是Import一个个导入组件太麻烦。

所以:@AutoConfigurationPackage注解是利用类Registrar批量导入组件。

问:哪一系列的组件呢?
看源码:
Registrar类里面的方法1的参数1:
在这里插入图片描述
AnnotationMetadata metadata
注解的元数据信息。
这个注解就是AutoConfigurationPackage
在这里插入图片描述
所以第一个参数(AnnotationMetadata metadata)就是:
注解AutoConfigurationPackage的元数据信息,这个注解标在哪里?它的每一个属性值都是什么?
那注解AutoConfigurationPackage是标在哪里了呢?
关系是这样的:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以:
注解AutoConfigurationPackage是标在EnableAutoConfiguration注解上。
而 EnableAutoConfiguration注解是标注在SpringBootApplication
而SpringBootApplication标注在com.rtl.boot.MainApplication类上面。
所以我们在debug的时候:
在这里插入图片描述

解释这段代码:
在这里插入图片描述
加入我们想看一下这段代码执行之后的结果:

new PackageImports(metadata).getPackageNames()

选中这段代码,然后右键:
在这里插入图片描述
在这里插入图片描述
得到的结果:
在这里插入图片描述
为什么是这个报名呢?
因为这个注解标注在这个MainApplication上。
这个类的全类名是:com.rtl.boot.MainApplication
然后把这个包名封装在数组里面。然后注册进去。
在这里插入图片描述
相当于这个Registrar类把某个包里面的组件全部注册进来。

总结:
注解AutoConfigurationPackage是将指定的一个包下面的组件导入进来
这个包就是Main程序所有在包(com.rtl.boot.MainApplication里面的com.rtl.boot)
这就解释了:默认的包路径是main程序所在的包。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 11:54:42  更:2021-12-05 11:57:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:40:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码