00:00
好,前面呢,我们通过分析http including auto configuration给大家呢讲解了一下我们这个自动配置的原理,那么在这个自动配置的时候呢,其中有一个环节就是这个自动配置要能生效啊,它有一些判断,就是这些conditional,这些注解,只有我们这些判断成功了以后,哎,这个自动配置才能生效,包括我们来看我们给容器中加组件的时候,At being,给容器中呢来添加这个组件,但是呢,添加的时候也有条件判断,哎这个条件判断呢叫conditional on Miss being,也就说容器中呢,必须没有这个组件,哎,Missing being叫没有的意思,容器中如果没配过这个组件,我呢就给你配一个,所以呢,现在呢,就有这么多的conditional on什么什么,他们呢,就是利用此文底层的这个conditional注解做的这个condition。
01:00
正到注解呢,后边指定的是一个我们条件判断类,我们点进去这个条件判断类呢,有一个慢齿方法,我们自己呢可以写Java代码,只要匹配了我们返回处,哎,不匹配返回false,那么返回false的情况下,相当于条件判断失败,一旦条件判断一失败,后边呢就可以不执行了,那么呢,像这个原生的注解这个呢,在我们spring注解版里边都有,那么这个conditional生的这些注解,Spring注解版里边注解版,那么大家呢,可以来看咱们这个原生的咱们这个condition的作用,Condition作用。来大家呢,可以来详细的来阅读一下它,但是呢,我们现在呢,它的作用就是说,哎,我们必须是咱们这个conditional。Conditional指定的条件,条件成立,我们呢才给容器中添加组件,或者呢,配置类,才配置类里边的所有内容才生效等等等等,也要说呢,而我们呢,把这个conditional注解扩展了很多,比如我们在这看到了好多,而这很多注解呢,我来列举出来,来给大家呢,我来复制过来,这注解呢,原理呢,就是我们注解版里边讲的,大家可以来看,那么它们的作用呢,我们来大概带大家看一下,第一个conditional on Java,那它的作用呢,就是判断诶我们当前的这个Java版本是否符合要求,是不是我们要求高版本的Java还是低版本的Java等等等等,这是第一个,还有呢,Conditional on b呢,它的判断意思是我们容器中是不是。
02:57
存在指定的组件,哎,比如我们这个HTTP,哎,我们来配这个filter的时候,它就标了一个conditional on being,这missing being呢,它的作用是判断容器中没有这个子项。
03:14
也就是说呢,如果没有这个组件,我就给你加,也就说这个判断成立了,容器中确实没有这个组件,我才给你加,否则就不加,那么与之对应的就有condition on b,容器中有这个组件和容器中没有这个组件,然后呢,还有我们是否满足一个指定的SP表达式,还有呢,我们判断容器中有这个类啊,如果有我们就给你干,如果没有就算了,还有呢,我们判断容器中没有这个类,然后如果容器中没有这个类,我就给你,哎,添加没有这类啊,有这个类我就给你不做,比如呢等等这些判断,比如还有这个UN property,它判断我们这个系统中是否有指定属性啊,也就是说你在配置文件里边啊,或者是否配了指定的属性,包括呢,还有conditional resource,我们可以检查类路径下有没有对应的资源,包括呢,我们conditional on web application看一下是不是当前web环境这个呢。
04:15
我们就判断,哎,你当前呢,必须不是外部环境才行,然后呢,还有我们基因Di里边是否存在指定项等等等等,这有一大堆的判断,他们的底层原理呢,就是我们spring的conditional,大家可以在后来探索,那么基于这个条件,我们呢,就能想到我们虽然自动配置类非常多,我们来打开,我们说自动配置类呢,都在S。这个包下这个包呢,专门有一个文件。将factor里边有这么多文件都是自动配置类,但是呢,由于自动配置类大多都有一定的条件才能生效,哎,我们说自动配置类哎,必须在一定的条件下才能生效,也就说啊,虽然我们加载了这么多自动配置,但不是说所有的功能都生效的,比如我举一个例子,AOP点进来,你看呢,Op要能生效的场景是什么呢?它来判断conditional on class,比如说我们这个项目里边有一个类,有哪个类呢?首先有这个类,还有aspectct和advice aspect呢,这是我们这个切面类,切面类呢,需要导入我们aspect接这个包,我们还没有导入ASP接相关的这个包,这一块呢,我们来看一下,没有接相关的包,所以呢,A的功能现在还不能用,就是说。
05:49
句话自动配置类必须在一定条件下才能生效,所以说呢,我们现在呢,重要的任务就是我们怎么知道哪些自动配置类生效了,因为我们只有知道了哪些自动配置类生效了,这么多的自动配置类哪些生效了,我们才可以看哦,它给容器中这个功能,比如a op功能,它做了什么活,哎,也就说我们才能这么观察,但如果说我们挨个挨个来分析,这是不是太麻烦啊,我们第一个办法呢,你就可以打开每一个自动配置你来看哦,他要判断内路镜下有没有这个结果呢?没有,那这个类不生效,我再来打开这个我们来看,诶,他要判断类镜像不是类镜像,我们这个项目下有没有这个类,也没有,那它不生效,如果我们一个一个这么来判断,太麻烦了,那家怎么办呢?我们可以在配置文件中写上一项。
06:46
叫debug debug呢我打成默认呢,是它的作用呢,就是帮我们来,它呢是开启spring的。Boot的debug模式,这个debug模式呢,会非常好用,我们来运行一下,一旦在debug模式进来以后呢,来运行起来,控制台里边就会告诉我们哪些类配置类用了,哪些没用,哎,比如你看配控制台打了这么多来往上翻。
07:20
往上翻。再往上翻这块都是打的,你看自动配置报告,也就说呢,我们可以,我们可以通过启用bug等于true属性。来让咱们这个控制台,控制台打印咱们这个自动配置报告,这样的话呢,我们就知道哪些自动配置类生效了啊,这样我们就可以很方便的知道哪些自动配置生效。
08:01
哎,比如这个报告呢,我们在控制台就有这么多,哎,他说什么positive matches,哎这个positive呢,就是哎我们这个什么生效的,这生效的呢,这一个自动配置,哎匹配上了,还有呢,我们Dis自动配置里边的这个也匹配上了呢,它这会打印我们匹配的在这有这么多,诶相当于这些自动配置,现在我们来启用了。来复制复制复制,但是呢,这还有一个叫negative match,我们没有匹配上的,你看active active它没有匹配上,还有呢,我们A,诶确实也没有匹配上,等等等等,所以呢,自动匹配报告里边,我呢就截取上两个就行了,我就不把这个全复制来了,它的这个自动匹配报告里边positive match里边打应了我们已经匹配的东西。
09:00
好,这里边呢,有我们已经匹配到的,哎,这有匹配到positive matches,哎,就说自动配置自动。哎,自动配置类启用的,哎启用的哪些自动配置类启用了,那么当然还有他在下边打着没启用的,有这么多自动配置类哪些没启用。在这,然后呢,我们就可以通过哪些启用了,我们来看一下这些类帮我们做了什么功能,好把这个没启用也放在这儿来,我们可以分析没有启用的,没有启用和匹配成功,没有启用没有匹配成功。成功到咱们这个自动配置类,就是呢,我们通过它来分析就行了,以后呢,有了它我们呢要用spring boot,我们先来控制台看一下哦,我们当前呢,哪些自动配置来起作用,起作用以后呢,我们再来看这些自动配置帮我们干了些什么活啊,我们在这些自动配置里边慢慢来寻找就行了,好,这就是我们这个自动配置报告。
我来说两句