00:01
呃,然后下边我们简单的来看一下spring这个原理,Spring BOO这个原理哈,其实这个我们你要看源码的话,这个就非常非常的漫长了。但是呢,如果我们只是啊说把结论告诉大家,这个就不是那么特别的难了。呃,首先呢,它要spring boot啊,在启动过程中呢,首先会读取一个spring.fair这样一个文件。这个文件在哪呢?有一个包叫spring boot auto config2.1.6啊,有这个包,下面Meta INF spring点有这么一个文件。我们去找一下啊。Spring的auto configuration。呃,在这。这里边呢,看myta infer,看这里边有一个文件叫spring factor。这里边儿这个这东西其实还是很多的。
01:02
啊,这个百万雄狮啊,这个很壮观,看着也挺辣眼睛。啊。那然后呢?呃,这里边儿需要去读取什么呢?有一个啊,有一个属性呢,叫做前面的一大串哈,叫enable auto configuration,有这么一个属性。咱们去看一下啊。CTRLC。CTRLFCTRLV。哎,有这么一个属性,这不是有个注释叫auto吗。哎,这是属性名。后边从这开始往下。一直到。一直到这儿全是属性值。啊,这就是为什么他在这儿要写一个反斜杠,写一个反斜杠呢,就表示我这个还没写完,我要换行了,我这就带个反斜杠,然后下边换行接着写。啊,这些东西呢,你看啊,其实你不用看前面的哈,它最后都是auto configuration。
02:01
各种的auto confi啊,各种auto各种的这个自动化配置,所以说呢,其实人家框架呢,人家要考虑的问题是非常非常非常非常多的。就是每一个configuration背后都有一段缠绵悱恻呃,让人催人泪下的爱情故事。随便随便你随便打开一个哈。你看这个各种auto con上面就会有各种的conditional啊,就是哎,我这个我这个自动化配置,它是在什么情况下满足什么样的要求,它才会。加到L容器里边,你这个auto convi加到LC容器里边,它就会下一步呢,去加载我们对应的这个properties。Enable configuration properties。这个东西是不是我们前边用的那个东西啊。呃。
03:02
啊,我们叫configuration。他这个叫。Enable configuration properties。呃。这个好像还不太一样哈。哎,就是说呃,加configuration这个注解表示它是一个配置类,然后呢,Conal啊,有各种conditional啊,就是满足各种的条件,它要加到XC容器里边诶。所以说这里边儿哈,就是它要加载的这个自动化的配置。它要加载的自动化配置啊,太多了,你看这不是还有auto configuration。Active auto configuration啊,就各种各种不同的这个情况。呃,有没有一个我们觉得能够。能够我们可以看一下了哈。Web Mac multipart。
04:01
HTTP扣顶啊,就是我们可以可以咱们看看这个哈。呃,在这个上面的话呢,这个上面你看就有各种的configuration。啊,这个叫呃conditional啊,就你看这个conditional on web application,这个意思就是说呢,你必须现在能检测到一个。Web application就是web的LC容器的对象才满足这个条件。肯定是no on class是character including filter,你得当前呢,有这个filter我才给加进来,因为它就是做这个字符集的这个嘛,做编码的这个,你得有这个过滤器,我才会让这个自动配置,才让它生效啊。On property你得有哎,Http springhttp including这个设置为enable的啊,然后这个才可以。只不过呢,后边写了一个match if missing,就是说如果这个配置项丢失了没有的话,可不可以呢?就是说他说也可以啊,设置为处的话,其实也可以。
05:07
哎,然后呢,Enable configuration properties啊对,这个地方其实是应该看后边这个。看它后边的这个,呃,Properties这个什么什么properties这个啊,这个里边。这个里边有configuration properties,就这个东西呢,和我们在student student上面写的这个是一样的。你看我们我们students上面,Student上面用了configuration properties,他的http properties也用了conviration properties,他写prex,我们也写了prex。所以说我们咱们写这个东西吧,它的用意呢,不仅仅是说我们自己怎么去读取这个配置文件。啊M配置文件,而且它呢,你看spring boot也是用这种机制,也是用这种方式去读取配置文件的。
06:00
我们前缀是student,它前缀是spring.HTTP啊,就是以这个开头的,下边的都是跟当前环境的HTTP相关的属性配置有关系的。诶,然后呢。嗯,看看,回来看这还有啥哈,读取我们的。这个属性啊,加在加在。我们这里边呢。所有的。啊,这个各种这个自动化配置的类啊,这个自动化配置类,咱们是以这个是以这个为例,咱们来看的别的都也都是这个大同小异的。这个自动化配置类上面会有各种的肯定渗透注解,说这个类是在什么情况下加的LC容器里边。哎,然后呢,这是启用我们的。呃,配置属性这个功能吧,啊,就是说根据它你在这里边儿呢,有默认值,这里边儿很多东西很多时候是有默认值的啊,这个打开在这儿哈。
07:02
这个有有没有默认值啊看看。这是这又是一个静态的内部类。这个这儿没有,我们去找一个带默认值的哈,我们找那个的。呃,我们刚才看到那个哈跑哪去了。嗯,CTRLF一下吧。Red auto configuration control c control shift t c v。啊,这里边儿看这个proper。这里边你看贝斯零。这个大你估计是啥意思。Database index used by the connection factory,哎,连这个的时候默认找索引为零的数据库。一共多少个数据库啊,大家。哎,非常棒。啊,最最棒的就是你们了。啊,你们连有16个数据库都知道,还有什么事能难得住你们?
08:06
啊。这是,这是U的,好吧,原来我的目的在这儿呀,我自己都没有发现。然后这个host,这个主机地址是默认是logo host啊,所以你看这是它的默认值,你要是不用它的默认值,就在压里边去改一下。包括你看下边端口号默认是red,默认6379这个端口号也是,那你要是。就是6379就不用改了,它的配置文件里边已经配了,就是它自动配置里边已经有了,如果我们不是6379,你再去改一下啊,有的有默认值,有的没有默认值啊,这个超时时间啥的这些没有啊。然后呢,你看这里边儿有cluster。Cluster里边呢,它会有一些个盖塞的方法啊,也就是说为什么这个属性名后边写属性的时候,它会有这个点呢。
09:01
哎,就是因为呢,你看,呃,你看这个这个配置类哈,它的前缀是red spring red啊。Spring,我要配这个属性的话,我们写的这个属性将来就是这么写的。点database,诶。然后呢,或者是你看下边这个是你去写这个。点ready.URL哎,再下来spring.ready.host啊就是这样一个关系,然后呢,你到这个。比如说到cluster这了。那么这写呢,就是spring.ready.cluster。然后呢,下边cluster里边有什么概算的方法,就就继续再往后再去点啊,这个属性呢,一级一级的,它为什么可以这样写,就是因为我们有这个Java的这个类啊,在背后是有这样的支持的,所以说这些东西呢,其实。
10:01
呃,你像克cster后边这些东西都是它的概赛的方法啊,它的支持呢,都是这些盖赛的方法。哎,然后呢,这边这不是个je哎,就是你看它底层也是靠的是宅啊,这边get这set的前边这些东西的get set方法,哎,它可以配,就是因为这边有盖赛的方法。所以说这个时候其实是我们的在yama或者properties配置文件里面配的东西,背后呢,就是有这样的properties这样的文件在支持我们,在支撑着我们。呃。哎,就是,呃。加载我们这样的自动化配置的类以后,加载自动化配置类以后,根据自动化配置类基本上都可以找到什么什么这样这样的类。我们可以随便看一个啊,随便咱们随便找一个。找个也是咱们不认识的啊,这个其实我也不知道什么意思啊。
11:03
嗯,Ctrl c ctrl shift t ctrl v。这里边儿有各种的conrational,它是配configuration enable configuration properties,这有个什么什么properties。这properties上面加configuration properties注解,这有前缀,后边有各种属性,有的有默认值,有的没有啊然后呢,这边。呃,还有有根据需要有可能会有这个静态的内部类,然后反正都是干赛的方法,布尔类型的话呢,是以意字开头的啊,布尔类型是以意字开头的,然后其他的话是get开头的啊,E字开头的就相当于那个get方法。我们看这个呢,不是为了看这个类本身是啥意思,我们是让大家去体会这个套路啊。哎,这里边儿就是有这样的一个套路。呃,加载这个类以后,我们就就有了默认配置了,哎,就有默认配置,就是它已经指定好那个值的,就是默认的配置值,你要你要是不满意的话,就像red那个端口号,你要不满意的话,跟你的实际情况不符合,你就去配去改,所以说我们在呃,Spring put的环境下边,我们在这个。
12:14
配置文件里边配的东西。其实呢,都是你对自动自动配置的那个值的修改。啊,当然了,有的时候自动配置的那个地方没有值,你得去指定,有的时候呢,你是对它默认值的一个修改。你们我们都是在自动化配置的基础上做进一步的调整。啊,所以我们做的是这样的事儿。然后呢,再根据condition到什么什么注解决定加载哪些个组组件。所以说啊,你看我们。都是先有这个starter啊,泡沫里边去加进来这个starter。这个start里边呢,它里边就会有什么什么这个auto configuration。这个configuration呢,它在。
13:03
这个configuration这个类里边,它有这个什么什么properties。里边呢,就会有这个默认的配置。哎,我们可以。啊,就是这个,哎,就是这么个意思啊,Conditional,当然这个自动化配置类上面也会有这个去决定要加载哪些个组件。要不咱们画个小图图吧?来我们看一下啊。就是spring boot的一个基本原理。哎,你看是这样的哈,就是。
14:03
呃,首先呢,是在这个pom.X毛里面要加入这个starter。就是spring boot什么什么starter。哎,加入这个依赖。这个依赖里边呢,会有,哎,当前这个环境呢,它所需要的自动化配置。什么什么?然后呢,这个自动化配置里边。呃,又有这么几个东西啊,有一个是。呃,什么什么conditional。这个注解。根据这个注解呢,决定我们要在什么条件下加载什么样的这个组件,或者说当前这个类呢,要不要加入到LC容器里边啊。
15:03
这个。根据这个去决定。加载到LC容器的组件。哎,由这个来决定。哎,这个背后呢。加载一个就会。连锁反应加进来一大串啊,加进来一大串。除了这个呢,还会有这个一个什么什么properties。还还会有这个类啊,还会加载到这个类,加载到这个类呢。在这个类里边。我们就能够去读取这个默认配置。哎,多去默认配置,那默认的配置你要是觉得不满意,或者默认配置没有值,那么你就在不里边。
16:05
哎,然后呢,去配就好了。啊,就是我们给大家这么画啊。就这些我们给它框起来,这部分是人家框架封装好了的,是不需要我们去做什么操作的。啊,或者从这开始啊,这个starter还是我们需要去加的。框框里边是框架做的,然后呢,我们需要做的呢,还有就是说我们需要去。呃,加主启动类。啊,这个需要需要有。我们需要有主启动类。然后呢,我们还需要去加这个。呃。这个application点哈。或者是这个我们application。Their properties。这样的配置文件。这个配置文件呢,其实是修改默认配置。哎,在默认配置基础上进行进一步的调整。
17:12
嗯。啊,这个虚线外边的是需要我们去做的啊,如果有必要的话呢,我们还可能会在这个主体动力上面啊,写这个enable什么什么这样的注解。啊,然后呢,你可能需要。呃,看你根据你的需要哈,你看你需不需要写这个component sky。哎,是不是需要这个。然后呢,我们后边整合买蒂哈有一个map。扫描那个map的接口。呃,然后呢,还会有这个,比如说。呃,大概大概就是这些吧,或者说就是根据我们的需要哈,我们在主启动类上可能需要写这样些个注解。呃,然后呢,你加了这个对应的依赖。
18:00
建好主启动类,根据你的需要加上注解配置文件,配好了spring boot的使用就是就是外边这这些,这是spring的用法,它里边的原理的话,咱们说抽取到最简单的就是这么一个原理。啊,加载自动化配置肯定是到决定呢,加载哪些个组件,然后根据什么什么文件里边读取默认配置,根据你的配置文件修改默认配置。啊,这是一个非常非常简洁的去说的啊。那咱们就不不再根据这个去看源码了,看源码这个是一个非常要命的事情。
我来说两句