粉丝2.7万获赞27.0万

在 supreme 项目中如何开启?得录一数据员监控页面。好,接下来我们一起看对应的实现流程。 supreme boot 和我们的数据库连接词得录一配置监控页面, 然后配置监控页面的话,一共有两种方式,第一种方式是属于自定义的版本,然后另外一种方式是使用我们 spent boot 里面的 start。 好,我们今天先看自定义版本的整合的一个流程。 第一步我们要在 home 点叉 meal 中啊,去添加我们德鲁一数据库连接词的一个依赖。好,我们看一下。好,这个就是我们数据库连接词的一个依赖,然后 对应的版本我是配置到我们的副工程里面的啊,我们看一下副工程登录一啊,使用的是这个版本一点二点二零,然后这个是目前最新的一个版本啊。好,这是我们的第一步, 然后第二步的话我们要去编写一个我们的数据员,他对应的一个配置类。好, 然后配置类的话第一个要去做的事情就是和我们的 datashores 啊去做一个绑定。 然后第二步的话,我们要去开启我们的 c 口的一个监控,然后另外一个就是 c 口防火墙的一个功能。好,这是我们的第二步啊, 然后第二步中的第三第三小步就是要去开启我们德鲁一监控的功能。 好,然后这里的话我们可以去设置对应的一个账号还有密码啊,然后这里的话就是我们的访问的一个路径,这个地方可以自己去自定义。 然后第四步的话就是我们要去开启我们 web 应用的一个菜单的功能,也就是我们的这个管理后台需要有哪些菜单?好,这些都是在我们的 datasource configure 啊这个类里面去做一个实现。 好,我们看一下对应的代码,需要相关资料和代码的小伙伴可以在评论区扣一,然后私信过去。好,这里可以看到啊,这个就是 拦截的,就是拦截所有的一个请求,对吧?拦截所有的一个请求。好, 然后这里对应的就是开启我们 web 应用菜单的一个功能,然后上面的这个方法就是去设置我们的 管理后台的一个用户名还有密码,然后这个是访问的一个映射的一个路径。啊,好, ok, 然后再往上走,这里的话就是去开启我们 c 口防火墙,还有对应的日志相关的一些监控。嗯, 然后这上面的这个注解是什么呢?就是和我们的数据员去做一个绑定。好, ok, 那这个就是我们 datasos configure 这里面要做的事情。好,接下来因为我们要去连 接我们的数据库,对吧?所以我们需要有一个 application 这样一个属性文件,我们找一下属性文件, 好大致的看一下啊,这里面实际上就是防火墙还有日志,然后这些对应的就是 ip 用户名还有密码啊,驱动。好, ok, 然后接下来的话什么呢?我们要去编写一个 control 进行一个测试,因为你要去产生对应的 c 口,对吧?那我们的管理后台才会产生对应的监控的一个日志, 那最后就是去访问我们德鲁伊的一个监控的一个页面。 ok, 那我们接下来去看一下啊。好,这个的话就是他对应的一 一个监控页面,然后这里的话就是我们的首页啊,一开始进来的时候这个地方是没有任何数据的,你必须要去产生对应的 c 口。好,我这里去访问一下,然后我们在这里查询。 好, ok, 那这个就是我们今天 supreme boot 和我们的得录仪啊,整合对应的一个数据员的一个监控页面。


好,那在讲刚刚说的这个自动刷新之前啊,我们先来讲斯文布特,因为在斯文布特里面他就是也也也是类似的,他也会有这么一个属性,好吧。呃,因为啊,我们要去测这个自动刷新的功能,我肯定是要用到一些看错了的, 因为大家比较方便,就是我们应用不停吗?然后我去改配置,然后我通过访问看错了,哎,我能够拿到,看能不能拿到最新的配置,好吧,所以我们这边直接来给大家先讲斯文布特他的使用的方式啊。 好,那么呃来看,再往下面去走。哎,比如说你现在,呃,如果说是十分布的里面要和我们拉阔丝来一起使用的话,你可以引入一个斯大特,就这,就刚刚这个斯大特,拉克斯,宽衣格斯布特,刚斯大特, 对,好,那么我们把这个一大包把它刷进来,刷进来之后呢,我们就可以用史本布的了。那么怎么用的?请大家应该都知道 把 sprine, 呃不对 k 型点乱方法,然后把麦不对 k 型点,克拉斯以及阿格斯把它给传进去,对啊,然后呢在这个上面去使用我们 sprineboot 所提供的这个入检,当然,呃,我们这边呢,我还说了你要去建一个看错了会比较好啊,来建一个 youtube service 的, 错了,然后在上面写一个 rest, 看错了,然后在里面去提供一个方法,返回一个直啊嘛,就叫做 test, 然后,呃,这边的话就写一个 getty map, 然后这边就写一个 test, 就这样子,好吧,然后,呃,我们也在这里,我们在这个地方,我直接去使用我们的那个 ipad new 来,我们就不用设计师了啊,就是一回事吗?呃艾特伴侣啊艾特伴侣然后把我们跟这个地方我们说写的这个东西,呃直接的切过来吧。好,来写到这里来。对好,然后这个 这地方我就直接把这个 u 的内把它给返回来我把这个 u 的设计师把它给删除掉。好,这样子就更加简单。当然我们啊用的是 sprine 布的,所以说这个麦 config 其实我们也可以不写了。哎就这样子。好,那么来看啊 那么我现在直接来呃运行我这个十分不舍的项目。对,我们等一下就来用浏览器来访问这个太子的我们来看,哎,你能不能首先看能不能拿到 这个属性所对应的值好吧,这个配置所对应的值。好,首先我们刚才启动他好像报错了,他说啊没法解析什么什么的说白了啊,我们这里是拿不到值的啊。所以为什么呢?因为食量一样的。如果说我们用食人不同,其实你至少你得告诉当前这个应用 你要去连连拉裤子的地址是什么。对,我们都还没有告诉啊。所以说你可以在干嘛?你可以直接在我们的 apuk 开心点 property 是文件里面,你可以去配一个拿货时的地址。那有同学可能啊,讲到这里或者写到这里就会有一个疑问,那说,呃,周老师,你既然在你的应用里面你仍然要去写 aobudyq 心点 property 是那么你为什么还要用拿货词呢? 对,你为什么不要把你的配置像你直接写在这个 pro 文件里面就就得了呢你为什么还要去拉伙子呢,对不对?好,这个地方呢,大家能够理解,其实首先我们要配这个地址, 我们不一定非得写 properly 是文件,我们可以完全通过通过干低的方式也可以来配这个例子,对不对?通过干低的方式,你 也可以这么来配,你这么来配,你就不用写,哦,不对,开心点, problem, 你是这个文件,对啊,那么这是,呃,你可以配的地方,那么同时还有一个点,就是你要知道我们这里写这个地址,其实啊,你写了之后就很少会去发 改变。对,但是啊,你看我们刚刚在拉裤子里面我所写的这些内容,你会有各种各样的配置。像那如果说你把这些内容你写在了这个文件里面,那么万一你这些配置像你要发生改变,你整个应用你就能重重启, 你不重启你就没办法去读书到新的配置。那如果说我现在是用的拉伙子,我把配置写到了拉伙子里面,然后我这边我就不去写,那么我就利用拉伙子的一些功能,到时候你这些配置如果说发生了改变,那么我应用我是不用重启的,好吧,我们等下给大家去来,给大家去演示。但是还有一点 就是我把配置写在拉口子上面,那么,哎,其实我可以有很多的应用都可以来共用这个配置,这也是非常好的一个点,对不对?多个应用,你你有些配置像他就是差不多的都,他就是一样的,所以说我们可以单独的把它抽出来, 写到拉口子上面写一份就可以了。对,好,随时都是他所提供的一些额外的功能啊。好,那么来看,我现在呢就,呃,配了一下拉口子的地址,那么我们现在再来试一下,我们看能不能读到相关的一些内容呢?好,现在还是报错。 你好,这里报道错,其实还是刚刚说的。哎,就是 strong 部的它没法根据你这个内去找到对应的值,那么说白了还还是没有从拉裤子上面去找到对应的值,那这是为什么?其实也很简单, 我们现在只是去连的 max。 对,那么你因为我说了 max 里面他其实有很多很多这种电台 id 吧,那么你担心你这个应用你是要读哪个电台 id 呢?你要告诉 我的框架,我的代码就是我们这边可以通过这个方式来指定一下,比如说啊,当然啊,我们先不讲这个吧,其实就像我们刚讲 spring 的时候,你也可以直接通过一个柱,姐就 通过这个柱剪来,我们先来试这一个啊,我们可以直接在刚刚我们四分布头这个启动内上面去使用拉裤子 property 是硕士,这个柱剪来指定,你想读哪个配置啊?你想读哪个电台 id, 明白吗?好,那么我现在就指定了,指定之后我再来启动看能不能拿到啊。 好,你会发现现在他好像就没有报错。对,没有报错,我直接来访问一下,我们刚刚的看错了,八零,八零太死了,我们看能不能拿到。哎,这就拿到了咒语,这就是我刚刚这个配置像里面我所配的 这个内容。对,那如果说我现在把这个周瑜改成一二三,哎,他能不能就是我现在发布这个配置,我把配置改了,那么我能不能在不重启应用的情况下面我读到最新的配置呢?我们来试一下来,好像没有读到,你看我这在刷新啊,好像没有读到,哎,有人说说说啊,这位老师, 你这里不是设置成为了醋吗?他怎么没有刷新呢?来,注意,我们现在是用的 springbookbm, 我们还没用 spring cloud 啊,所以这个地方呢,其实啊,他会有一点点小小的一个限制,就说 你在你单纯的用私奔步子的情况下面呢,你得用这个注减,把拉克斯歪扭的注减,并且你还得啊把它里面的那个属性耶,他默认是 boss 的,所以说你想让这个配置能够刷新,你得把它改成旧啊,所以说,哎,你这个代码这么写, 他才能够达到说自动刷新的那么一个功能。好吧,我们再来试一下啊,我把应用重启,因为原码改了,你肯定得重启应用好,改了之后我再来刷,你看,首先 现在肯定是拿到最新的,因为我在重启一用的时候,我肯定是读到了最新的配置,那如果说我现在在改,比如说我改成一二三四五六,好吧,我们再发布配置 点,确认点,确定好来再翻,哎,你看就能够拿到最新的了,明白吗?所以说,哎,这就是我们刚才说的那个自动自动发布的那个效果,所以说,哎,你这些地方你都得把它设置为处 啊,明确的相当于告诉我的那个时候说,是不是不是这个配置要能够自动刷新,就是我这里读的这个配置要能够自动的刷新。 好,所以说这是呃这一块的,当然,呃,像我们刚刚讲的啊,哎,你,你其实还有另外的一些使用方式,比如说我们刚才说的,我们不是要去配一个我要读的是哪个电台 id 吗?我们除开这么写之外,我们除开用这个柱姐之外,我们也可以直接在我们的这个 呃,配置文件里面你去指定对台 id, 比如说指定一个 test, 好吧,同样的,如果说你想要支持刷新的功能啊,他默认等于 pose, 所以说你就可以把它改成处,就像我们刚刚用柱姐一回, 没事,好,那么只不过啊,来注意,按道理来说呢,我们这么写了应该就可以了,对不对啊?当时我们来启动,你会发现他又爆错啊,就是这里啊,如果说你用这种配置的方式去指定电台 id 呢,他还有一个限制,就是你得把这个属性把它改成去好,所以这个没办法,我们来试一下, 你看加上之后,哎,他就没有报错,没有报错呢,那就证明,哎,我是可以拿到的。并且啊,我再来试一下自动刷新的功能好不好, 来点确定啊,再刷一下,你看他也是 ok 的。所以说你如果说啊,是用这种 property 是文件的配置的方式来指定电台,你的话,注意一定要把这个加上, 所以这是我们单独用 spring 布特的一些用法啊,希望大家呢,你回头也可以去操作操作好不好?所以接下来呢,我们就来讲在 springcloud 里面,我们该怎么去使用 nikes 的这个配置中心的功能。

今天来讲一下视频部的多环境配置文件,首先第一步就是创建两个不同环境的这个配置文件,一个是这个 dv 开发环境,一个是这个 pow w 型,就是生产环境创建了两个环境的配置文件,具体的配置内容、配置餐字,比如说这个数据库, 他的这个用户名密码是不一样的,那么就改成对应环境的这个配置参数的值就可以了。所以就是两个不同的这个配置文件,不同的这个配置数据, 这个时候就是已经配置完成了。配置完成了之后,那我们就是怎么找到到底用的是哪一个环境的配置文件呢?首先的话来看这个 idea, 在我们开发的时候, 这里可以看到这个配置,点这个编辑配置,找到这个环境就是这个 profile, 这个配置项这个值的话就是填这个 dv, 因为在 id 里面 我们是开发环境,所以这里填的是这个 dv, 就是开发环境,这里就是填了这个 dv 开发环境之后,我们就是运行的时候点这里就是运行的时候,运行这个项目的时候,他就会自动的找到叫 dv 这个名字的这个配置文件,也就说约定大于配置,你对你配置文件有叫这个名字的, 他就会自动的映射。那如果是生产环境,生产环境我们是要使用这个配置文件以及这个配置文件里面的这个配置数据,那这个时候怎么办呢?其实就是打包吗?就是慢慢打包,我们来看一下,因为我现在就是使用的是阿里云,直接部署到这个阿里云这里可以看到这里有一个慢慢的这个打包的这个命令, 这 clean 打包这里就是有配置这个参数,其中最后面这个参数就是杠 p, 杠 p 的话就是 profile 的意思,这个参数就是固定的, 拿来它的作用就是配置这个不同环境。现在我配的是这个 production, 就是生产环境,所以我就运行的时候它就会自动的 找到生产环境的那个配置文件的配置数据,他去打包。刚才讲的是这个阿里云,如果是这个普通的这个版本打包了,我们也是一样在这个打包命令后面多加一个参数就可以了。你加了参数之后, 他那个参数杠拼那个参数固定的,他就是表示指定用哪个环境的配置文件就是起这个作用的。

spring boot 自动配置原理,那么这道面试题呢,在 seven boot 里边啊,应该也是也算是一个高频的面试题啊,如果想问这个原理部分的话,那么这个自动配置呢,应该是首选啊,因为这个是 seven boot 里边最重最最重要的这么一个原理啊, seven boot 自动配置,那么你如果只有掌握了自动配置才算是呢,掌握了这个 seven boot 的一个精髓啊 啊,不仅仅是说我们只是知道这个斯文布的怎么去用啊,那么这个自动配置这个原理是什么呢?为了本视频的文档,我已经整理好了,并且与往期内容一起汇入,放在了视频的最后面,坚持看完,一定对你有帮。那么这个是个简单的这个斯文布的自动配置的这么一个流程,那么你能够明白这个流程呢,实际上这个自动配置原理呢,就很简单了啊,我们来看怎么样描述一下这张图啊, 那么在我们 spring boot 里边呢,我们应该都知道它的这个使用呢,是只需要呢写一个 star 类,对不对?写一个主类啊,一个 star 的类,然后这个 star 的类上面呢加一个注解,这个注解呢,就是这个 at supreme boot application 这个注, 那么这个注解呢,就是我们这个自动配置的一个核心啊,就从这个注解开始了,那么这个注解呢,实际上它是一个符合注解,这个符合注解里边呢,它包含了三个注解啊,那么当然呢,还有一些加瓦源注解,这个加瓦源注解呢,我们就不去讲了啊,那么呢,这个是斯文布的中的配置的这个,嗯,其他的啊,除了加瓦源注解之外的另外三个注解啊, 也就是跟我们自动配置有关系的这么三个注解。简单来看一下,第一个叫做 spring boot configeration, 那么这个注解呢,实际上呢?嗯,没有多大的意义啊,这个注解实际上就相当于这个 at configeration, 只不过是呢,相当于在 spring boot 里边把这个注解呢重新定义了一下啊,它这个注解跟这个 at configeration 这个注解的含义呢,是一模一样的啊。 好,第二个注解呢叫做 enable autopic ration, 这个注解呢是最核心的注解。那我们先看,先来看一下第三个注解啊,再来讲这个核心注解。第三个注解叫做 components get, 这个注解就很熟悉了,对不对?就是我们 spring 中啊, 这个注解是用来定义这个扫描路径的啊,就是可以去定义这个扫描的这个包路径啊。啊,那么呢,这个斯文布的 obk 型呢,总共呢包含了这么三个注解啊,那么中间这个最最核心的注解呢,就是我们的自动装备。那么来看一下这个注解呢,他又啊分了两个分支啊, 两个分支呢,我们先来讲这个右边这个分支啊,右边这个分支,这个右边这个分支呢,也就是这个注解,他也是也是一个符合注解。这个符合注解里面的两个核心注解呢,第一个是叫做 auto configuration package, 这个注解是干什么用的呢?它使用了一个叫做 at 音破的注解的啊,这个注解来导入了一个类,叫做 autocome figuration package register 啊,这个 register 是里边的一个呃,类不类啊?那么呢,通过这个音魄的导入这么一个类,导入这个类是用来干什么用的呢? 他呢实际上是手工去注册病,手工去注册了一个什么病呢?这个病呢是用来了保存这个扫描路径的把,这个扫描路径呢,就是就这个注册 扫描路径呢,保存到一个全局变量里面提供呢给我们这个主要是 supreme 中的,比如说这个 j b a 啊,这个 j b a 框架提供这个给这个 j b a 框架去做查询的,比如说我们的 subree 呢,可能自己知道自己的扫描路径对不对,但是这个 j b a 呢,他呢可能也需要去处理自己的一些注解,那么他也知也需要知道这个扫描包路径是什么, 那么这个时候呢,通过这种方式去查询就可以了啊,当然这个是是根部的中的定义的啊,好,那么这是这些注解好,然后呢这个左边这一条路,那么就是我们这个自动装配啊,自动装配真正的核心就在这里了, 这个 at input 啊,也是同样的,采用这个 at input 就导入了一个类,叫做 auto configuration import selector 啊,看到这个 input select, 对不对?就是这个 at input 这个注解的一个核心啊, 它里边呢有一个方法叫做 c leg 的音 pos 方法,这个方法呢它会返回一个字符串,对不对?一个字符串数组啊,返回一个字符串数组,那么这个字符串数组里边放的是这个类的一个全路径,那么这些类的全路径呢 啊,都会被加载到这个 supreme l c 容器中。 supreme 呢? supreme 在读到这些类的全路径的时候,它都会把这些类啊全部通过反射的方式,把它呢放到这个 i o c 容器中啊,那么这些这些类呢就全部变成了一个病,明白吗?就在这个 c leg 的音破了这个方法返回的这个支付串数组啊,这里边的支付串最终呢都会变成一个 sprint 中的一个病啊, 好,那么这些字符串是哪来的呢?这个 select 音符的返回的这些字符串,这字符串哪来的?这些字符串呢?就放在这个 spring factory 啊,这就这个 spring 点 factories 啊,就是这个 metal in four 下面的 spring 点 factories 放在这个文件中, 这个文件呢它是一个 k y 流的形式,那里面有很多的 k, 那么主要在这个地方,在我们这个装配里面读的这个 k 呢,叫做 in level outer configuration, 主要是读这个类,这这个这个 k 啊,它是一个 k 值,那么这个 k 下面呢会有很多很多的这个字符串,每一个字符串呢都是一个类的一个全路径,一个类的全路径, 那么这个类的全路径呢?会通过这个叫做 spring factory 死 loader 点 load factory lam, 通过这么一个 a b i, 这个是 supreme 提供的一个 a p i, 这个 a b i 呢是属于 supreme 的一个 spi 机制,它呢会将这个支付串呢全部把它呢 反射反射了,然后呢最终呢把它加载到我们的这个呃 ioc 容器中啊,配合这个音魄的注解啊,要配合这个音魄的注解配配合这个注解,将这些字母串全部呢加载到我们的 ioc 容器中啊, 那么这些字符串如果到这个 ioc 容器中变成了一个病,对不对?那么这个病啊,那么这个病上面如果本身就带了这个 at the configuration 加上这个 at 并的话,那么这个 这个病里边的这个定义的这个病呢,也会被加载成一个病啊,这个大家应该明白,对不对?比如说我们的一个 at configuration 修饰的一个类,这个类呢,首先呢它自己本身呢会作为这个 ioc 容器中的一个病,对不对?那么这个 at configuration 修饰的这个类里边的这 每一个爱的病呢,都会变成一个病对象啊,这个是我们的这个爱的跟 figuration 跟这个爱的病的一个含义啊,那么通过这种方式完成的这个自动装配啊,什么意思啊?就比如说呢我们的这个 my bettis 啊, my bettis, 那么我们的 my best 呢?我们知道我们需要呢?呃,如果我们正常去 polo 这个 my best 的这个包啊,我们还需要到这个参谋文件中呢,去配置这个 my best 的,比如说 succession factory 啊等等,就是要配置这个 my best 相关的这些病,正常呢我们是通过一个病标签,对不对?通过一个病标签呢去配置的,那么我们需要配置好几个病标签啊,那么这个时候呢, 如果采用这个自动装配的话,那么呢我们这个 mybadys 了,只需要提供一个,提供一个文件,对不对?提供一个这个 metal info factories 这个这个文件,然后呢将这些病的这个全路径呢全部放到这里面,全部放到这里面啊,然后呢这个病呢采用了这个爱的分爱的跟飞哥瑞雪啊,将他这些病呢使用这个爱的爱的病的这个方式呢, 放到这个配置类里面啊,那么这个配置类呢,把它呢放到这个 fatspread 点 factory 之中啊,作为一个支付商放在这里边,然后所有的这个 mybads 需要配置的,并全部放到这个配置内中,这样的话呢,我们把这个 mybads 一拖进来啊,一依赖进来,那么呢 spread 呢,直接自动的就会去把这些病呢给加载进去, 而不需要我们再去写这些病标签了啊,这个就叫做自动装配啊,那么简单的归纳一下啊,就是采用了这三个注解啊,一个两个注解啊,一个爱的 input, 还有一个了爱的跟 fakerash, 当然了,还有啊,说到这个爱的跟 fakerash 呢,肯定离不开这个爱的并,对不对?通过这么三个注解,加上这个 spreen 的一个呢 spi 机制啊去加载,那么实际上就这三个注解啊, 然后呢,这个自动配置类呢,由了各个 start 提供,比如说我们的 mypenice, 它呢就会提供一个 start, 提供一个 start 包啊,给价包,这个价包呢使使用了这个 at 和 figuration 呢,加这个 at, 并去定一个配置类,定一个配置类,然后这个配置类呢,把它放到这个 supreme 点 factories 这下面,作为一个支付串,把它放在这下面,然后这个配置类里边呢,通过这个爱的并呢去定义了你自己需要定义的这个病啊,然后使用 spi 呢去扫描这个文件下的一个这个配置类啊,最终呢通过这个爱的音魄呢,把它导入这个导入到 ioc 文具中好,那么这个呢,就是这个十分 pro 的这个 自动配置的这么一个流程,也可以说呢是它自动装配的这么一个原理。


零到一教大家通过 id2 搭建一个 sure in boot 的一个后台的项目。首先打开 idea, 打开之后呢会有一个这么一个界面,然后呢点击 creating new project, 点击之后呢会有一个 spring 的这样一个按钮,然后这个呢会,你看有一个提示是创建 spring 布特的一个项目,然后呢因为它是爱第二集成了 stat, 第二 spirin 点 io 的东西,所以他就会自动默认的给你一些配置,点击下一步,点下一步之后呢,这里会去 呃编写你的组名称,你的项目名称之类这些东西,因为我们之前是用的 j 离开八,所以我们这里炸选择 j 离开八,然后呢这些名称根据你的需要改一下,我这里就不改了。然后之后点下一步啊,这里是那个你对应的项目的简介之类的 东西信息,然后这是项目的版本号, ok, 下一步。然后这里要注意一下,因为我们是做一个 spa 的一个项目,然后肯定是要写一些结果里的东西,所以要把这 spa 外边这个给选上 啊,其他的根据你的需求就行。 lovebok 是生成实体的一个该的赛的方法的一个组件啊,然后之后剩下的这些东西根据你的需要去加 啊,然后我们就暂时只加这些,然后点下一步,然后这是你最近的项目名称啊,我们就叫呆萌吧,就不改了,然后分你是完成, ok, 这个时候项目就在拉去代码,就在开始创建。 may even projects need to be imported okay, 这是 idair 的提示音,这个可以不用管,点那个导入对应的扎包啊,这个时候他就会去下载对应的门外的信息了。 ok, 现在是下载完毕了,下载完毕之后呢,打开这个之后看一下大体的结构啊。 ok, 这,这个,这个就是我们的启动类, spring 部长的启动类 啊,这里边存放我们的对应的配置信息,当然你也可以修改为 oppodyken 十点 y m l 的配置信息啊。 ok, 我们创建一个 ctrl, 测试一下对应的 这个四边布的项目是否能不能用。 ok, 我们创建对应的一个 啊,这个我们就叫做测试海螺 word 吧, 每一个程序员的第一个程序不都是韩罗沃的吗?对吧? ok, 盖子摆平啊,写一个盖子接口,然后这里呢,我们就打印一个 hello, what? ok, 他的短口号默认的话是八零八零,这个我们就不改了啊,如果你需要改的话,就是在这里设置一下你对应的短口号啊,我们改成八幺八幺吧。 ok, 然后这里我们启动一下。 嗯,看到这里有 start 带猫 application, 二点四零八秒啊,这里就能看到, 就证明他的体重成功了。好,这里我们访问一下这个借口哈,我们是八幺八幺,对吧?好, 嘿,啊, hello, word 出来了, ok, 证明我们的第一个 suring book 项目就搭建成功了。

这是一个简单的 spring boot 服务,在浏览器访问服务的接口成功返回结果,如果在 console 里面使用 fat 方法来进行请求,把 local hose 换成幺二七点零点零点幺,会发生什么呢?是的, 这里出现了跨域报错。我们知道跨域是浏览器的一种安全策略,在不同域名、不同协议、 不同端口的情况下就会发生跨越。 logo house 和幺二七点零点零点幺在概念上是同一主机,但从浏览器的角度看,他们被认为是不同的域。 下面给大家演示几种常用的跨域方案解决方案。第一种是项目中最常使用的使用 nginx 反向代理。在 nginx 上处理跨域问题 主要就是这几行配置, allow origin 用于设置允许跨域请求原地址。 allow headers 用于设置跨域允许携带的 header 信息。 allow methods 用于设置跨域允许的请求方法, allow credentials 设置是否允许跨域使用 cookies。 另外一个很重要的事,处理预检请求。当发生跨越条件时候,浏览器会先询问服务器,请求方式是 option, 只有得到肯定答复, 浏览器才会发出正式的 http 请求。所以当请求为 option 请求时候,需求返回一个状态码。二零四,保存设置后重启 injinx 测试一下,我们把请求端口改成 injinx 监听的八八八八,让服务 使用 and drinks 的反向代理 local host 请求没有问题, fetch 的一百二十七余名请求也正常返回。结果,除了 end drinks 方案, 也可以使用 spring 框架本身自带的 at cross origin 注解来处理跨越。这里注解的参数, foreign drinks this is page of origin a law hatters a law methods 和 law credentials 不一样,是使用 adcross origin 注解时, spring 框架会自动处理浏览器发送的预检请求, 我们不需要像 in drinks 那样设置响应预检请求。添加注解后重启服务测试一下同样可以解决跨越问题。除了使用 adcross origin 注解解决单一接口的问题,我们也可以使用全 全局 mvc 配置的方式,通过实现 y bmvc configure 接口注册自定义的拦截器配置需要拦截的接口,还有和之前一样的允许配置。 重启测试一下成功解决跨越问题。上面就是给大家演示的三种跨越问题解决方案,希望对你有所帮助。

spring 布的的自动配置原理这道面试题呢,可以说是 spring 布的当中最重要的一道面试题了,凡是问到 spring 布的,基本上这道面试题是必问的, 所以说为了体现他的重要呢,他的难度系数我直接标满了,其实他并不难啊,你只要理解了他,其实并不难,最主要呢是比较重要。我们就来讲一下,为了本视频的文档,我已经整理好了,并且与往期内容一起汇总成了二零二三年最新家网面试文档,放在了视频的最后面,坚持看完一定对你有帮助。 首先呢,我们会通过一个叫做根部的 configuration, 引入了一个 enable out configuration 的注解,那么这个注解呢,它其实就是负责 启动我们的自动配置功能的,你只有加了这个注解,他才会去读取我们的自动配置类,然后呢进行启动,我们可以结合代码来看一下。好吧, 我们可以看到啊,在我们的启动类上面就有一个 springboot application, 然后呢,他标记了一个 enable article recent 注解。那么这个注解当中呢,他又使用了一个 import 这个音破的注解呢?他又引入了一个音破的的 e fred 音破的 select 的组件。那么这个 api 啊,我之前在讲这个音破的注解的几种用法的时候,其实就已经讲过 它为什么叫 defrat import select 呢?我们应该也知道还有一个叫做 import select 接口,对吧?它也是一个 import 注解的一个可以导入的一这样的一个有效的扩展组件。 这个 input select 也是一个可扩展的有效组件,那么这个 defrat 呢,就是它的一个延伸出来的一个变种, 好吧,他是延迟导入,也就是说呢,他解析的比较 比较靠后,好吧,就是我们解析音破的注解。其实我之前在讲之前的面试题,如果同学们按照顺序听过来的话,我相信同学们应该应该听过我讲这个 api, 对吧? 那么解析我们的注解呢?他首先会先解析恐慌的,对吧?然后是 at bing, 然后再是 input, 那么这个 defired input select 导入的我们的并图键呢,它是比较靠后的,具体靠后在哪个位置,你可以翻一翻我之前的这个面试题, ok, 那么通过它呢?我们就可以通过这个 defrat import select 呢,我们就可以去导入一些个并组件,然后我们可以 你看一下这里面呢,就调用了一个 get configuration enter 方法,然后呢在里面又会去拿到所有的候选的配置信息,好吧, 也就是我们刚刚说了,它在加载 ioc 容器的时候, spring 容器启动的时候啊,它就会解析 input 注解。 那么解析音破的注解呢?由于我们导入了一个 defrat input select 的组件,它呢就会使 sprint 的自动配置类呢顺序在后面。第二呢,方便我们扩展和覆盖,怎么样?为,为什么是方便我们扩展和覆盖,这个能理解吗? 我们之前说过 september 里面呢,它有一些 conditional on, 比如说 on miss on, 并比如说有个这样的注解,意思呢,就是我容器当中需要有这个病,他才会启动,对不对?所以说呢,我们的配置类最好是并已经解析了,他再去解析自动配置类, 这个注解才能更好的发挥作用,对不对?如果你死不认不得的自动配置类,他的解序顺序在前, 你自己应用当中你配置的这些病都还没有注册进去,你觉得你这个孔蒂省的 o b 这个注解它有作用吗?是没有作用的对不对? 所以这个延迟导入选择器啊,就是为了让你自己配置的这些病呢,先注册,那么我这些 condition 的红病啊,我们医生病这些条件才能更好地去发挥作用,进行 覆盖进行,就是我们个性化的一个定制,能明白,然后呢,在这个 different import select 我们刚刚看的这个组件当中啊,他就会读取所有的 matter in for 当中的 spring in factories, 它这种方式呢,其实也是基于这种伪 s p i 的这种方式来进行扩展的。 ok, 我们可以看一下,在这个音魄的导入的这个组件当中, 它里面呢,就有一个 get out of configuration 这个方法,这个方法呢, 他就会调用这个 get candidate configurations 获取所有的自动配置类的所有的候选的自动配置类。那么我们点进来,然后呢,他会调用一个 load of factory names, 然后再次调用一个 low 的 supreme factories, 那么在这里就能体现,你看它就读取了我们所有类路径下面的 mat 音符 spring 点 factories 这个文件, 在这个文件当中呢,当然除了自动配置类,还有很多其他的一些类,但是我们这里只会找到自动配置类。好吧, 我可以结合这个图给你们看一下啊。这个是徐书老师之前呢在讲这个 spring 布的系列课程当中,给他们画的一个自动配置类的读取流程,我们刚刚说了, 那首先呢会解析我们的 ioc 容器加载,他会解析 input, 然后呢去解析这个 defrat select, 在当中呢获得所有的有效的后选的组件,然后呢调用 low low 的 factory names, low the spring 点 factory, 那么在里面呢,他就会去读取这个类录,就是去类路径下面啊,找到所有的这个文件, 当然我们很多的价包当中都包括了这个文件,包括我们的 spring 干部的这个价包里面有 spring defection, 还有呢 spring 干部的干 configuration 里面也有 spring in factories, 还有 spring 干病死,也有 spring in fact with, 当然还可以有很多,你可以呢自由的按照他的这个规则呢去配置自己的一个自动配置类,你只需要呢 导出一个自己的价包,然后呢在 meta infor 里面放入一个你自定义的一个 supreme 点 factories, 那么这个里面的文件啊,它都是以这种 key value 的方式 来进行书写的,所以我为什么叫它尾 spi 呢?因为它从严格的意义上来说呢,不是标准的 spi 机制,标准的 spi 机制呢,它这个文件啊是一个接口的名字, 然后它里面维护的这些类名,还有它的位置啊,应该是在 service 里面,这是标准的 spi 啊,那么 supreme 的这个自动配置类的这种方式啊,它就是一个 supreme 点 factus, 然后它里面维护的这些类,我们也可以稍微看一下, 我们就打开这个 spring 干部的 gank auto consideration 吧,这个里面我们可以看一下,它里面维护的类呢,是以 t 等于 value 的方式来进行书写的,所以说我为什么叫它尾 spi, 好吧,当然它也是 类似于 spl 这种机制来进行扩展的,那么他就会找到所有 enable out to cooperation 这个 key 里面维护的所有的类。好吧, 那么这里面的类呢,他有很多,就是读取完之之后啊,默认的他总共有一百二十七个之多,但他每个版本可能不一样啊,你这个数字你就不要记了,总之呢,你只需要有很多,然后呢, 它就会进行过滤呀,因为你很多的自动配置类里面都有什么? conditional on bing, conditional on class, 对吧?它要再一次的进行筛选,筛选出最终有效的这些自动配置类, okay, 所以说大概的过程呢,就是这样的,我再结合原码呢,带你们看一下,刚刚呢,我们看到了这个方法,对吧?在这个方法里面呢,他会读取到 所有的自动配置类, ok, 读取到所有的,不是读取到所有的配。自动配置类,他会读取到所有的 tw 的这些类, 包括自动配置类的题,他都会读取到,但是呢,他会筛选一遍给你呢,筛选成只是自动配置类的这些才会留下来,这是他的出筛,知道吧,这是他的第一遍筛 在哪里晒的呢?你看它在这里会 load spring factories 传了一个,这个不是这里点 get or default 传了一个 factory name, 那这个 factory name 呢?是从上面传过来的 从上面传过来的,这里这里,这个 lower favorite 又是从上面传过来的,我们可以一步一步看上去 low the factory 又是从上面传过来的啊,那么我们只能重新看一遍啊,从这个从这里,我们重新从我们的启动类里面重新更一遍,进来啊 进来,然后进来这个音魄的组件里面,里面呢就会去调用所有候选的自动配置类, 你看他传进来的是什么?传进来的是一个这个方法,所返回的就是 enable out to configuration 这个 key, 以这个完整类类的名字作为它的 key, 那么就可以读到文件当中的,你看我复制一下它的完整内路径,然后我们再结合这个 supreme 点 factory 再看一下,那么就能找到,知道吧,他就是把这个完整的内路径呢给你一步一步的往下面传了,知道吧?要用 low 的 low the factory names, 然后再调用 low the spring factory 一步一步传下去,下去,好吧,把所有把这个 spring 点 factory 所有的文件呢找出来,然后再出筛一遍, 注册一遍呢。我刚说了,按照版本的不同呢,大概有一百二十七个,然后呢还需要再去给你筛选一遍, 还需要去筛选那些有效的自动配置类,因为每一个自动配置类上面它都标记了什么 conditional on class, 那么你就像这个这个类路径当中呢,又没有 robbid m 类的,那么它就不会启用,对吧?那么这一次呢,再次筛选一遍又是在哪里呢? 我们再来看一下,再来到这个启动 la 吧, 点进来,点进来 import, 哎,点一下 import, 我们再来到这个 获得有效组件之后,获得有效组件之后啊,他就会在这一步呢给我们进行筛选,好吧,筛选出所有启动有效的这些自动配置类,最终呢留下来的才是 这些过滤条件之后,过滤条件之后匹配成功的这些所有的自动配置类, 好吧,默认呢就是二十三个,也就是你引用了这个 web 的弹性启动器,大概就是二十三个,它会启动, ok, 所以说它的整个过程呢,我再给他们总结 一遍。首先经过通过我们的这个 seven boot 的启动注解,引入了一个 enable out to configuration, 那么他呢?引入了一个音破他,那么这个音破的注解所导入的组件呢? 它是基于 defrat import select, 当然你也可以再把这个 defrat。 为什么要导入一个基于 defrat import select 的一个组件给面试官说一下啊,不说也是可以的,它的作用呢?我刚说了,它会在 顺序比较靠后的地方呢去解析,为的就是方便我们扩展和覆盖,好吧,刚刚已经讲的很清楚了。然后在这个音魄的所导入的这个组件里面呢,就会去读取所有的 spring 点 factories 这个文件,好吧,这个是它最关键的一步, 我把每个比较关键的点给你标出来啊。首先是导入了一个这个注解,那么这个注解呢,里面又导入了一个 input input, 里面呢,又导入了一个这个基于 defrat input select 的一个组件,然后读取所有类路径下面的这个文件, 然后呢过滤出所有的 auto conservation 类型的这个类, 因为我刚刚说了,这个文件当中包括了很多的类,那么只需要过滤出自动配置类。最后呢,通过孔 d, ctrl xxx 这些注解,应该是孔 d, ctrl n, xxx 这些注解来排除掉这些无效的自动配置类, 那么最终留下的呢,才是有效的自动配置类了,那么这个就是我们的自动配置类的流程,好吧? nice。

sprint boot 自动配置原理,那么这道面试题呢?在 sprint boot 里边啊,应该也是也算是一个高频的面试题啊,如果想问这个原理部分的话,那么这个自动配置呢,应该是首选啊,因为这个是 sprint boot 里边最重最最重要的这么一个原理啊, sprint boot 自动配置, 那么你如果只有掌握了自动配置,才算是了掌握了这个私奔部的的一个精髓啊啊,不仅仅是说我们只是知道这个私分部的怎么去用啊, 那么这个自动配置这个原理是什么呢啊?韩飞老师呢给大家呢画了一张简图啊,一张简图,那么这个是一个简单的,这个是分布的自动配置的这么一个流程,那么你能够明白这个流程呢,实际上这个自动配置原理呢,就很简单了啊,我们来看怎么样描述一下这张图啊, 那么在我们斯文部的里边呢,我们应该都知道他的这个使用呢,是只需要呢写一个 star 类,对不对?写一个主类啊,一个 star 类, 把这个 star 的类上面呢加一个注解,这个注解呢就是这个 at supreme boot application 这个注解,那么这个注解呢,就是我们这个自动配置的一个核心啊,就从这个注解开始了,那么这个注解呢,实际上它是一个符合注解, 这个符合注解里边呢,它包含了三个注解啊,那么当然呢,还有一些加瓦源注解,这个加瓦源注解呢,我们就不去讲了啊,那么呢,这个是十分布的中的配置的这个,嗯,其他的啊,除了加瓦源注解之外的另外三个注解啊,也就是跟我们自动配置有关系的这么三个注解,简单来看一下, 第一个叫做 spring boot configuration, 那么这个注解呢,实际上呢?嗯,没有多大的意义啊,这个注解实际上就相当于这个 at configuration, 只不过是呢,相当于在 spring boot 里边把这个注解呢重新定义了一下啊,它这个注解跟这个 at configuration 这个注解的含义呢,是一模一样的啊。好,第二个注解呢,叫做 enable auto configuration 这个注解了,是最核心的注解。那我们先看,先来看一下第三个注解啊,再来讲这个核心注解。第三个注解叫做坑破烂的 scar, 这个注解就很熟悉了,对不对?就是我们 spring 中啊,这个注解是用来定义这个扫描路径的啊,就是可以去定义这个扫描的这个暴露性啊。 啊,那么呢,这个私奔部的 obk 型呢,总共呢包含了这么三个注解啊,那么中间这个最最核心的注解呢,就是我们的这种装备。那么来看一下这个注解呢,他又啊分了两个分支啊, 两个分支呢,我们先来讲这个右边这个分支啊,右边这个分支,这个右边这个分支呢,也就是这个注解啊,他也是也是一个符合注解,这个符合注解里面的两个核心注解呢,第一个是叫做 auto configuration package, 这个注解是干什么用的呢?它使用了一个叫做 add input 注解的,呃,这个注解来导入了一个类,叫做 auto configuration package register 啊,这个 register 是里边的一个呃, lab la 啊, 那么呢,通过这个音魄的导入这么一个类导入,这个类是用来干什么用的呢?他呢实际上是手工去注册病,手工去注册了一个什么病呢?这个病呢是用来了 保存这个扫描路径的把,这个扫描路径呢,就是就这个注册扫描路径呢,保存到一个全局变量里面提供呢给我们这个主要是 supreme 中的,比如说这个 jba 啊,这个 jba 框架提供这个给这个 jba 框架去做查询的, 比如说我们的 supreme 呢,可能自己知道自己的扫描路径对不对,但是这个 jba 呢,他呢可能也需要去处理自己的一些注解,那么他也知也需要知道这个扫描包路径是什么,那么这个时候呢,通过这种方式去查询就可以了啊,当然这个是私奔布的中的定义的啊。好, 那么这是这些注解好,然后呢这个左边这一条路,那么就是我们这个自动装配啊,自动装配真正的核心就在这里了,这个 at input 啊,也是同样的, 用这个 at 音破了就导入了一个类,叫做 auto configuration input selector 啊,看到这个 input select, 对不对?就是这个 at 音破的这个注解的一个核心啊,它里边呢有一个方法叫做 select 的 input 方法,这个方法呢它会返回一个字符串,对不对?一个字符串数组啊,返回一个字符串数组, 那么这个字符传数组里边放的是这个类的一个全路径,那么这些类的全路径呢啊,都会被加载到这个 supreme 的 lc 容器中, supreme 呢? supreme 在读到这些类的全路径的时候,他呢会把这些类啊全部通过反射的方式把它呢放到这个 ioc 容器中啊,那么这些这些类呢,就全部变成了一个病,明白吗?就在这个 c lag 的音破了这个方法返回的这个字符串数组啊,这里边的字符串最终呢都会变成一个 supreme 中的一个病啊, 好,那么这些字符串是哪来的呢?这个 select 音符的返回的这些字符串,这字符串哪来的这些字符串呢?就放在这个 spring factory 啊,这就这个 spring 点 factories 啊,就是这个 metal info 下面的 spring 点 factories 放在这个文件中,这个文件呢,它是一个 k y 扭的形式, 那里面有很多的 key, 那么主要在这个地方,在我们这个装配里面读的这个 key 呢,叫做 enable outer configuration, 主要是读这个类, 这个这个这个 key 啊,它是一个 key 值,那么这个 key 下面呢会有很多很多的这个字符串,每一个字符串呢都是一个类的一个全路径,一个类的全路径,那么这个类的全路径呢?会通过这个叫做 spring factory 死 loader 点 load factory lamp, 通过这么一个 a b i, 这个是 supreme 提供的一个 a p i, 这个 a b i 呢是属于 supreme 的一个 spi 机制, 他呢会将这个支付串呢全部把它呢反射反射了,然后呢最终呢把它加载到我们的这个呃 lc 容器中啊,配合这个音破的注解啊,要配合这个音破的注解配,配合这个注解,将这些 字符串全部呢加载到我们的 ioc 容器中啊,那么这些字符串如果到这个 ioc 容器中变成了一个病,对不对?那么这个病啊,那么这个病上面如果本身就带了这个爱的 configuration 加上这个爱的病的话,那么这个 这个病里边的这个定义的这个病呢,也会被加载成一个病啊,这个大家应该明白,对不对?比如说我们的一个 add 跟 figure recent 修饰的一个类, 这个类呢,首先呢它自己本身呢会作为这个 ioc 容器中的一个病,对不对?那么这个 at configuration 修饰的这个类里边的这个每一个 idb 呢,都会变成一个并对象啊,这个是我们的这个 attic figurish 跟这个 idb 的一个含义啊,那么通过这种方式完成的这个自动装配啊, 什么意思啊?就比如说呢,我们的这个 my betties 啊, my betties, 那么我们的 my betties 呢?我们知道我们需要了,呃,如果我们正常去 polo 这个 my betties 的这个 包啊,我们还需要到这个参妙文件中呢,去配置这个 my bettys 的,比如说 sexation factory 啊等等,就是要配置这个 my bettys 相关的这些病,正常呢,我们是通过一个病标签,对不对?通过一个病标签呢去配置的,那么我们需要配置好几个病标签啊,那么这个时候呢, 如果采用这个自动装配的话,那么呢我们这个 my beds 呢,只需要提供一个,提供一个文件,对不对?提供一个这个 metal info factories 这个这个文件,然后呢将这些病的这个全路径呢全部放到这里面,全部放到这里面啊,然后呢这个病呢, 采用了这个爱的分爱的跟 victory 选啊,将它这些病的使用这个爱的爱的病的这个方式呢,放到这个配置类里面啊,那么这个配置类呢?把它呢放到这个 fatspree 点 factories 中啊,作为一个支付商放到这里边, 然后所有的这个 mybady 是需要配置的,并全部放到这个配置内中,这样的话呢,我们把这个 mybadys 一拖进来啊,一依赖进来,那么呢 suri 呢, 直接自动的就会去把这些病的给加载进去,而不需要我们再去写这些病标签了啊,这个就叫做自动装配啊,那么简单的归纳一下啊,就是采用了这三个注解啊,一个两个注解啊,一个 at input, 还有一个了 at 跟 faker rachel, 当然了,还有,呃,说到这个 at 跟 faker rachel 呢,肯定离不开这个 at 并,对不对? 通过这么三个注解,加上这个 spring 的一个呢 s p i 机制啊去加载,那么实际上就这三个注解啊, 然后呢,这个自动配置类呢,由了各个 start 提供,比如说我们的 my baddies, 它呢就会提供一个 starter, 提供一个 start 包啊,给价包, 这个价包呢,使使用了这个爱的,哼,这个为什么加这个爱的,并去定义一个配置类,定一个配置类,然后这个配置类呢?把它放到这个 spring 点 factories 这下面,作为一个支付串,把它放到这下面,然后这个配置类里边呢,通过这个爱的并呢去定义了你自己需要定义的这个病啊,然后使用 spi 了,去扫描这个 文件下的一个这个配置类啊,最终呢,通过这个爱的音魄的把它导入这个导入到 ioc 文具中,好,那么这个呢,就是这个十分不,它的这个自动配置的这么一个流程,也可以说呢,是它自动装配的这么一个原理。 感谢观看资料笔记,免费领取资料图三,扫码添加就可拿到想要的资料。