00:00
好,那前面呢,我们给大家说了一下spring boot的一些底层入解,那接下来我们就可以深入的了解一下spring boot的自动配置原理了,我们看一下什么boot到底是怎么神不知鬼不觉的帮我们做了那么多的事情,然后只是让我们关心我们业务逻辑开发就行了,那我们现在所有的分析呢,还是从我们的这个主程序开始,主程序里边有一个慢方法,我们是来启动整个spring应用的,当最重要的还是我们的这个核心注解spring BOO application,我们说这个注解呢,其实就相当于下边这三个注解,这三个注解呢,我们这个spring BOO application点进来,我们是把这三个注解我们复制过来的,所以呢,我们就拆开来看boot application的核心,那就在这怎么完成功能呢?我们挨个分析spring boot application注解里边的这些功能,首先它组合注解里边第一个spring BOO application,好,我们来搜索一下CTR springbo application就是它。它里边的第一个注解叫spring boot configuration好,我们把springb application的整个完整签名我们拿过来,来分析一下spring OB给我们来做了什么,来到这个这一块。
01:14
首先我们要看spring boot啊,不开这个注解,这个注解呢,它是这些注解的合成注解,这些注解里边呢,我们逐行分析,其中我们要分析的第一个好,第一个,那第一个呢,就是我们的这个spring boot configuration这个注解有什么厉害之处,我们可以来看一下three book configuration我们来点进来,我们来看一下这个注解是干什么的,点进来来们发现呢,它就是一个configuration,那configuration是干什么的,我们以前已经说过了,对吧?它非常简单,它呢就代表我们当前是一个配置类,代表代表当前是一个配置类,也就是说明我们的这个慢程序,我们的这个慢它呢也是spring boot里边的一个配置类,这个呢只不过是一个核心配置类,然后呢,那我们smallboli这个configuration就没有什么说的意义了,接下来最重要的就是enable auto configuration我们说这个。
02:14
之前呢,再来说一下component sky,因为component sky呢,我们之前说过,它其实就是一个包扫描给我们指定我们要扫描哪些东西,所以呢,我们第二个boot里边第二个合成注解component sky,那我们就不说了,它呢就是来指定我们要扫描哪些,只不过呢,我们boot在这呢,有两个自定义的这个扫描器,那这一块的component sky到底该怎么用,大家也可以参照老师之前讲解的spring注解版啊,大家去来搜索我们这个spring注解,去B站搜索都可以找到我们component sc的这个用法,这个呢。目前意义不是很大,然后呢,接下来我们核心是第三个,那所有的重量全部就压在了这个注解身上,叫enable auto configuration,也就是说我们w boot applicationli是这三个的合成,这两个都没啥意思,那最重要的就叫enable auto configuration,那这个东西它都干了哪些?
03:15
好,我们来点进来enable auto configuration点进来发现呢,它也是一个合成注解,除了这些语言注解信息外,我们把其他的这两个拿过来,大家看一下,我们把这两个呢拿过来在这儿,也就是说我们enable auto configuration,它呢是这两个注解的合成,这两个注解分别是什么?第一个叫我们的auto configuration package。好,Auto configuration package,我们来看一下这个注解帮我们干了什么活,翻译过来就叫自动配置包啊,自动配置包来这个是啥意思啊?好,我们来进入它的源码来看一下就行了,那我们来到我们的auto configuration package来点进来,我们发现呢,它其实是一个什么import,诶,Import这个东西呢,我们之前正好也说过,Import是什么?就是给容器中导入一个组件。
04:16
给容器,给咱们这个容器中导入一个组件,这个组件叫什么呢?叫auto con Russian package register想要导入这么一个组件,但是呢,这个register的作用是什么?我们说import,其实它有更高级的用法,大家可以来参照,来老师在这呢给大家给了一个视频地址来,就是我们讲的spring注解里边用port的其他高级用法,我们直接在这说它的这个意义是什么?就是呢,我现在给容器中导的是一个register,而register我们来点进去,我们发现呢,它有两个方法,其实也就是说我们利用register给容器里边批量注册我们的这个组件,因为import我们一个一个导太麻烦了,我们可以写一段代码批量注册,我们看到它调用register方法,在这呢来批量注册,到底批量注册什么呢?我们断点答到这,来,第八个组起来。
05:12
所以呢,我们现在看到我们的第一个核心auto configu,呃,这个auto configuration package,它是利用register给容器中导组件,但是这个不是导一个组件,是利用咱们就要register给容器中,给容器中导入一系列组件,哪一系列组件你一看源码就懂了,然后呢,我们来到这,我们来看这个方法,这个方法呢,传了两个参数,A notation me data,相当于我们注解的原信息,那我们这个注解是谁注解呢?指的就是我们的这个in auto configuration,呃,这个package这个注解,注解的原信息代表的我们这个注解标在了哪,它都有,它的每一个属性值都是什么,我们可以打开这个原信息,我们这个注解,大家猜想我们这个注解是标在哪的?就是这个auto con pack,这个注解呢,其实是标在慢application里边的,因为我们这是一个合成注解。
06:13
这个里边又包含它,所以相当于那个注解也是标在my application里边的,所以我们能看到注解的原信息里边,我们是标在哪个类上,标在我们come and Google谷BOO my application这个类上,我能完全看到这个结果。然后呢,接下来他在这干了一件什么事,他拗了一个package exports,相当于我们按照翻译就是我们整个包要导入的东西,他把这个圆注解拿到,有一个get package names,相当于把我们注解原信息拿来获取到我们的这个包名,我们来把这个包名拿过来看一下。我们让他来计算一下,他得到包名是什么,就是com and硅谷boot,为什么得到是包名?因为我们这个注解标注在这个主类上,主类所在的包就是这个包,先得到了主类的这个包名,然后呢,把这个包名大家看,最终封装到我们的一个数组里边,然后给我们注册进去,相当于我们这个register,就是把某一个包下的所有组件批量注册进来。
07:17
好,所以呢,接下来我们终于搞清楚了,Auto confiration package,就是将我们这个指定的一个包下的所有组件导入进来,哪个包下呀,我们现在应该非常清楚了,就是慢程序所在的这个包下的所有组件,慢所在的包下,那这就解释了一一个事情,解释了哪个事情,为什么我们默认默认的这个包路径是慢程序所在的这个包就在这儿,所以每一个默认规则其实都在底层有源码的这个体现,那我们相当于,诶这个我们就解释清楚了,我们的auto configuration啊,我们就解释清楚了。
我来说两句