00:00
好,前面呢,我们分析了一下po文件的这个负依赖,以及我们这个start场景启动器,接下来呢,我们来说一下这个主程序,这个主程序呢,我们发现只要运行慢方法就行了,当运行慢方法,大家注意在我们spring应用run的时候,需要传入一个类,这类是什么呢?一定得是一个spring application来标注的类,如果我把这个注解我来注掉。我来点,然后呢,我来运行一下走。来运行,我们可以看到这一块呢就报错了,所以呢,这个注解呢是非常重要的spring of来说一下这个主程序。二主程序类也是我们的这个主入口类。好,它的这一段代码呢,是这样,里边呢有一个核心注解叫application,我们翻译过来呢,就叫应用。
01:10
那么这个类呢,我们来标注在某一个类上,把这个注解呢,来标注在。标注。在某个类上。说明这个类是spring BOO的配置类啊,咱们这个主配置类,也就是说呢,我们这个就会spring。就应该。运行。运行这个类的慢方法来启动应用。Spring应用,哎,所以说呢,我们有一个非常重要的注解叫spring application,那么这个spring application到底是什么呢?来打开可以看一下,点进来,诶,我们发现呢,它其实是一个组合注解,它由这么多的注解来组成的,我们把这一段代码复制过来。
02:15
放在这儿。好,我们来看一下它的这个组合注解里边呢,第一个注解叫configuration,按照我们这个注解的名字,我们翻译过来就叫配制。的,咱们这个配置啊,我们也叫配置类,那么呢,这个注解它标注在某个类上,在某个类上表示。这是一个spring boot的配置类。其实这个注解呢,我们来点进来看一下,大家都会非常熟悉,哎,点击这个注解,那么呢,它上边有一个注解叫configuration,而这个configuration这就是spring最底层啊,之前用spring的时候给你的一个注解的,这个configuration叫配置的意思,配置,然后呢,它标在某一个类上配置,配置类上来标注,来标注这个主解,我们一直在说这个配置类,配置类所谓的这个配置类呢,就是跟我们以前的配置文件啊,这是一样的。
03:33
配置文件,我们以前开发spring应用,我们需要编写非常多的配置文件,这文件一多,哎,太麻烦了,那接下来呢,怎么办呢?我们把这个配置文件都替换成一个个的配置类,当然boot怎么知道这个类是来做配置的,比如这个配置类里边我们可以给容器中注入组件等等,以前配置文件的功能它都能来做,那么呢,我们要让WBOO知道这是一个配置类,就要标注咱们这个configuration注解呢,就知道包括呢,你来标configuration,效果呢,都是一样的,只不过呢,这个注解是定义的注解,这呢是spring boot定义的注解,而我们这个配置类呢,其实点进去它就是一个组件,哎,我们记住配置类也是配置类,也是容器中的一个组件。
04:29
哎,Component,好,这是我们说的第一个注解,叫LY开始,然后呢,它的第二个注解我们翻过来。叫enable auto configuration,这翻译过来呢,叫自动,这个enable应该叫开启,启用的意思,开启自动配置功能,开启自动配置功能是什么意思呢?诶,我们来看我们整个boot的应用里边没有做任何配置,我们spring mvc也启动起来了,我们整个应用也能用了,包扫描这个东西也扫进去了,但这些功能都是怎么做的呢?就是用我们这个注解叫enable auto configuration。
05:16
将开启自动配置,然后呢,以前我们需要配置的东西,配置的东西啊,我们现在呢,都不需要配置了,然后呢,是spring boot帮我们自动配置,当然要帮我们自动配置,我们就得需要加上这个注解,这个注解呢告诉开启自动配置功能告诉。开启自动配置功能,这样的话呢,我们整个自动配置,这样自动配置的功能才能生效,配置才能生效,而自动配置到底是什么样的一个原理。
06:00
我们呢,可以打开来看一下这个enable auto configuration点进来,哎,它里边呢,首先有一个叫auto configuration page,它呢也是一个组合注,都把它先复制过来。好。找比如说我们这个enable auto,它里边呢,首先有一个注解叫auto。那么按照这个注解呢,我们来翻译过来,它叫自动配置包,诶这个自动配置包是什么意思呢?来点进这个注解来看一下。自动配置包,然后呢,它呢是这个注解import啊,它是用import这个注解来完成的功能,而这个import呢,就属于spring的底层注解,Spring的底层注解import它的作用呢,就是给容器中,给容器中导入一个组件,导入哪个组件呢?就是后边的这个类啊,这是相当于是我们可以在后边写一些逻辑判断,然后给他返回说你要导入哪些什么呢?有导入到组件。
07:25
由咱们这个类来指定该导入哪些组件。由他import里边说的这个class类,那import的其他用法,或者spring注解的这些底层原理来我们上硅谷呢,同时发布了咱们这个spring注解版,大家呢都可以注解版,哎,在我们这个古励学院里边。当然了,想要了解他们的底层原理,都可以看咱们这个注解版里边的讲解,我们就先放在这儿。
08:00
高览一下。好,我们就来说一下咱们这个auto configuration,它利用这个import指定的这个类给我们容器中导了一些组件,导了什么组件呢?我们来说,哎,我们来点进来。点进这个类,它呢,这有一个方法叫register being DeFinitions,注册一些being定义信息,就是呢,这是想给容器中导组件,怎么导呢?你看啊,主要是这边它呢把这个什么Meta data,那Meta data就是我们这个注解标注的这个原信息,所有的原数据,然后呢,Get page内拿到一个包名,我给这打一个断点来以debug的方式运行一下,看他拿到的是什么包名。首先呢,这个me data是我们这个注解的原信息,这个注解呢,我们来打开这个原信息,它是标注在我们来看这个注解来,我们标的是Bo application注解,哎,这是application注解里边的东西,然后呢,它是标在hard word my application方法上的,如这个注解的原信息都能拿得到,但是主要呢,这有一个new page get page name要算一下这个包名来,可以看一下这个包名来计算一下计算哦,这个包名呢就叫com at硅谷,所以呢,这个注解其实它本身的含义auto configuration,它本身的含义就是将将将什么呢?将我们主配之类,主配置类就是在这所在的包下边所有的组件都扫描进去,你看这包名都是主配置类的,所以呢,它的作用是将。
09:50
主培之类。配置类,也就是我们application注解标注的这个类。
10:01
那咱们这个所在包,所在包及下边所有子包里边的所有组件扫描。到容器中。比如呢,Spring底层也是用的spring,它扫描到咱们spring容器中,哎,这是一个非常重要的一句话,把这拿到这儿,所以说呢,哎,我们把它整成高亮高亮。所以说我们能扫描进我们的这个ctrler,因为呢,它是在我们这个主配置类的这个子包下,那么按照这种想法,我一旦说换包了,哎,比如我把这个hello ctrl了,我放到哪呢。我们来写一个包名,这个包呢叫。com,我们来创建一个类表,在这个Java下,注意啊,在Java下我来创建一个类,是放在。com包下的一个叫hello controller。
11:07
好,我把原来大家可以看到com下也有hello controller点进at硅谷,这里边才是我们的主类,然后这里边儿有这个controller,我这个controller的内容呢,我附到这。CTRLC,我来复制到我们这个CTRL里,看能不能得到。扫描进来好,我如果要来启动,我们把我这个C我来注掉。我把它来逐掉CTRL斜杠啊,跟我们eclipse里面快捷键一样,我们来把它逐掉,我再要来启动,看行不行,把它停掉,再来启动应用。我们看能不能把我们外边的这个扫进来呢。好,我们在这儿启动,我们来看一下控制台。控制台,控制台呢,这一块的应用在这儿,诶我们这个控制台打开往上拉一点,这个应用呢,就启动起来了,但是呢,我们看控制台它把这些什么error error这路径映射到了,但是我们hello请求却没映射到,所以说如果我们想要来访问local host8080,我来访问哈请求,那肯定就是404了,来访问哈请求。
12:28
下的哈回车,哎,我们发现它这一块呢,给我们报的是状态404的页面,就是说扫不进来,所以一定注意它是将咱们这个主配置类所在包下面的所有配置扫进来,那这就是我们这个auto configuration package这个注解的作用,当然enable这个注解里边呢,还有一个注解。哎,他呢,还标了一个注解叫import。哎,我们说了这个import,它们的作用就是给容器中导入一些组件。
13:04
给容器中导入组件,导入什么组件啊,就是我们后边这个类告诉你,你要导入这个组件,后边这个类呢,哎,我们翻译过来它的意思叫啊,自开启自动配置类的这个导包的这个选择器是吧,就说呢,导入哪些组件这个选择器啊,所谓的这个选择器呢,我们来点进来看,它想跟我们说要导哪些组件,好我们来点进这个里边,这里边呢,只有一个方法叫enable啊,这是判断的,但是我们来看到它的这个负点进来里边呢,有一个方法叫select imports,诶这个方法的作用呢,就是来告诉我们这个spring容器到底要导哪些组件,这些组件呢,都是以spring数组的方式返回组件的权名。啊,在这一块,它会将所有需要导入的组件以全类名的方式,全类名的方式返回,然后呢,这些哎,这些组件呢,就会被添加到我们这个容器中。
14:16
就会被添加到容器中,那么到底这个select跟容器中添加了哪些组件呢?我们分析一下刚才的这个断点,好,我们在这打了一个断点为debug的方式来进行运行。这个运行呢,来到这一步,这是我们获取到注解的原信息,我们这个注解是什么,Application标在哪个类上等等都有,那接下来呢,给它放映,放心放心放心,这一步呢,返回了一个configurations,由于这个configurations呢,我看下边哎都在用,包括最终还把这个configurations给返回了,成了一个数组,所以呢,这个configurations数组就是我们容器中需要导入的,总向来往下放。
15:07
我们看到呢,这个组件呢,其实是哎,Configurations有多少呢,有96个,这96个组件呢,都叫什么名字得什么什么什么auto con什么什么什么auto,听着名字呢,意思是叫什么什么的自动配置,所以说呢,它的这个作用最终会给容器中。容器中导入非常多的自动配置类,诶我们叫什么什么auto configuration这些自动配置类的作用。哎,在自动配置内的作用就是给容器中咱们这个导入这个场景需要的所有组件,并配置好这些组件,这就是这些自动配置类,比如我们要做op功能,那么呢,Op的自动配置类就帮我们配置好,我们要做批处理功能,那么批处理的自动配置类能把相应的组件以及一些对象都配置好,比如呢,我们要做芒果DB的功能,那芒果DB相关的东西我就配置好,这些自动配置呢,都是通过这些自动配置类完成的,那我来给大家截一个图。
16:34
保存一下好,就是这些自动配置类啊,复制过来,我们来在笔记里边。Images文件夹,把这个图呢保存在这个文件夹里边来引入进来。Control shift,哎,把这个图片这个自动配置类,它呢,在我们这个images文件夹下,我们这个叫什么呢。
17:00
我们把这个文件名,这个我们复制过来。放在我们这个文件夹里边。已经有了,哎,把名复制一下好,这是我们这个自动配置类,哎,长这样。然后呢,我们给容器中导了大量的这个自动配置类,当自动配置类的细节我们后来再来讲自动配置的时候再说,那么有了这些自动配置类他们呢,就免去了,有了自动配置类,自动配置类它呢就免去了我们手动编写配置,手动编写配置和注入功能组件等的工作,那么有了这个自动配置类,这些工作都不用我们做了,哎,这些配置类帮我们做好,那么。这自动配置类它怎么就扫描到这些,他从哪得到的呢?其实我们有据可查,他在这调用这个get configuration获取的配置文件,主要呢了这么一个方法叫加载我们这个。
18:18
掉了用这个方法,这个方法里边呢,传两个参数,第一个参数的值我来点进来叫enable auto configuration class是。第二个参数呢,就是一个叫class的类加载器机制了,好,然后呢,它的作用是什么,我们来点进这个方法。我们来点进我们的这个方法来看一下。好,Get configu,这有个啊,我们来S点进来,它的作用呢,其实在这它用class load类加载器获取一个资源,获取这个完资源以后呢,它会从这个资源中,哎,把这个资源呢,当成一个properties配置文件,从这个proper配置文件中拿出我们这个country class name,就说我们这个工厂的这个名字。
19:17
从哪里得呢?就是从这点进来,叫Meta in for spring factor啊,它的作用呢,其实就是从么类路径下这咱们这个factor中获取enable auto。指定的值,那么呢,我们可以来看一下。入这里面,这没有,那说明这个配置文件里边没配在auto里边,这里边有enable autoration们来看这一块的配置就是我们。
20:07
导入的这些自动配置类,所以呢,我们一句话总结就是说我们spring boot在启动的时候。在启动的时候,从那路径下。的这个文件夹中获取它指定的值,将这些值,将这些这些值作为咱们这个自动配置类导入到容器中。导入到容器中,然后呢,我们这个自动配置类就生效了,自动配置类就生效,它一生效以后呢,就能帮我们进行自动配置工作了,哎,也就说呢,它只要一进行自动配置工作,我们就不用写那么多的代码了,其实为什么会有这么些神奇的效果,就是这个自动配置类我们没写的这个配置其实人家都帮我们来写了,比如我们来提前看一个自动配置类,我们现在是web应用,跟web有关的,我们在这找一下,哎,这有web web,诶这有web mvc web mvc的自动配置能点进来,你看这个自动配置呢,这些解我们后来详细再说,我们先来说一个an BT b呢,就是给容器中添加一个组件,我后来也会说到,比如呢,它给容器中添一些什么filter组件,哎,包括呢,给容器中做一些配置,呃,配置什么呢?来往下翻,哎,给容。
21:41
最填一些什么视图解析器,填一些return view reserve,所以说我们以前的配置都被这些自动配置类来替换了,他说语言的配置我们需要自己指定的配置,自己配置的东西,这个自动配置类都帮我们做了,也就是说其实在底层用spring的时候一个都不能少,只是这个东西被官方替我们做了,那么呢,我们主要来看这些自动配置类其实都在包下,在我们这个炸包。
22:26
这里边呢,来展开有咱们这个auto con,那我们就能看到,这就是对整个g two意义的所有大整合。比如有跟高级消息队列的,有做A的,有做缓存的整合,哎,有做do的整合,包括有做我们这个什么,哎,Search啦,包括我们这个板引擎等等等,往下就说整个G的整体一揽子解决方案全都在这自动配置着,所以呢,我们这个s boot就会这么强大。
23:03
Java意义的整体整合解决方案和自动配置都在,都在我们这个包里边,我来把它复制一下copy。都在我们这儿,主要呢,就是我们这个自动配置的这个炸包,我把这个炸包呢留在这里。它里边呢,帮我们来做了这些事,所以说呢,我们用了springb,我们不用配所有的东西了,而一切都有人帮我们来配,以后呢,我们就没事推荐大家在这些自动配置这些包里边看每一种功能它都是怎么配的,如果不满意,我们后来啊,通过不断的学习,也可以自己来改善一些配置。
我来说两句