粉丝7.8万获赞28.6万

好,那我们继续啊,下面呢,我们进入我们这套课程的第二大部分啊,就是我们这个 aop 部分,那我们先先看一下这个 aop 部分啊,我们讲到哪几块啊?第一块呢,我们说一下 aop 的简介 啊,到底是什么啊?其实之前呢,我们在做这个 ioc d i aop 思想提出的时候给大家说过,是吧?这个地方呢,我们再去呃威胁一下。第二呢,我们说的是基于插苗配置的 aop 啊,就 a o p 怎么用插苗方式去配置啊?第三个呢,我们讲一下这个 a o p 的注解方式去配置啊。第四块呢,我们讲一下基于 a o p 的一个实线,也就是我们的声明式事物控制啊。 ok, 那首先呢,我们看第一个关于 a o p 的简介, 在 o p 简介这个地方呢,我们讲到如下四个小点啊。第一个小点,我们看一下 o p 的概念啊,到底是什么?那第二个小 条件呢,我们看一下 a o p 思想的实现方案啊,它到底用什么方式啊去实现呢啊?其实就是我们的东西答案里,对吧,我们的 proc 啊。第三个小点呢,我们说一下这个就模拟 o p 的基础代码 啊,呃,这个模拟 o p 基础代码呢,其实就是结合之前我们在呃第一大部分,就是那个 l c 那个地方,我们学的并 pose processor 啊,使用一个并后给后重启器去模拟,其实当时在那个地方啊,呃,在学完这个并 pose processor 的时候,我给大家写过一个是吧?但是那个呢是代码是就是全部都写死的 啊,当然在这个地方呢,我们其实很多代码也是写死的,只不过要比那个更加完善一步啊。 ok, 那第四个呢?啊?第四小点,我们说一下 a o p 的相关概念啊,因为 a o p 啊,本身在开发时啊,它有时候我们会用 很多术语跟很多概念,所以这个术语你得知道, ok, 那下面呢?我们先把这个第一个 aop 的概念,然后给大家说一下,是吧?这个 aop 的概念还是说在之前给大家讲过啊?说过一遍,我们再把它温习一遍。这个 aop 本身啊,它不是单词 对吧?这叫 aspect orientate 是吧? programming 是吧?面向我们这个切面编程啊,翻译成中文就面向切面编程,那这个面向切面编程到底是什么呢?你去结合我们的面相对象编程去记 啊,我们的 op 就面向对象,就变成他是纵向的,对一个事物的抽象啊,当时给大家讲过,是吧?比如说,哎,我们对一台手机啊,我要用面向对象思想去设计这个手手机,我怎么办?我是非要用手机的类,是吧?内部是不是有一些手机对应的一些属性, 对吧?比如说有这个青铜有屏幕是吧?有这个,呃,摄像头这些是不都是些静态属性,是吧?但手机本身是不是还有些动态行为, 能不明白?比如这个手机可以打电话,这个手机可以照相,这些是不是是动态行为?是不是把它封装成相应的方法,对吧?我调手机然后打电话的这个这个这个方法,那这个手机是不是就能执行打电话的功能?我调用手机是不是这个照相的然后这个方法,那这个手机是不是执行照相的功能? ok, 那我们是对各个事物进行一个纵向的抽象,对吧?这个事物包括哪些静态属性,包括哪些动态的动作,都用方法跟属性哎去表达, ok, 但是呢,我们知道,然后可能在很多对象当中,我们可能要要抽取每个对象当中的一部分功能,在鼻屎组装上 成一个,你可以认为是个对象再去执行,明白吧?这其实就是我们面向切面编程的思想。 ok, 那后边呢,有一句话我们再读一遍啊,说这个 a o p 呢,它是横向对不同事物的一个抽取 啊,那属性与属性,方法与方法,对象与对象都可以组成一个切面,而用这种思维去设计编程的方式呢?我们就叫面相切面去编程了,这种思想, ok, 下边有张图,我们看一下啊, 这是刚才说的,比如说啊,我左们这个,我左们这个就是一个 user service, 一个对象,这是面向对象的思维方式去设计它啊,它是变成 a 吧,这像 a, 最终我扭一下 user service, 但是它它是会变成一对象,对不对? ok, 你看纵向,什么叫纵向啊?从上往下, 它是不是内部包含 user, 是不是一个属相,对吧?还有个包括什么 reject, 这些是不是动态的方法, 是吧?再看右边这个呢,叫 except in dog 啊, except in dog 本身也是一样 a, 对不对?也是用面向对象的方式去设计的,它内部呢?是不是有两个方法,它没有静态属性 是吧?说纵向的话,去设计时候都是面向对象的方式,对吧?但有的时候呢,我想横向去抽取,什么叫横向抽取啊?比如我需要要这个方法, 我也需要要这个方法,我希望他在执行时啊,按照这个顺序先执行这个方法,再经这个方法,对吧?把他们临时干什么组装到一起,所以这叫横向抽取,那你会发现横向抽取其实比纵向他更加灵活,对吧?哎,我可以让 要将多个对象对应的方法进行横向抽取,我也将多个对象的这个属性进行横向抽取, 我给将什么呀?多个对象,然后把它横向抽取啊?这样是都可以的,对吧?临时组装之后再去运行啊,这个其实就我可以把它称为一个切面,对吧?我在运行这个切面时,其实就是运行不同对象当中的不同方法或不同属性,或者不同对象, 能明白吧? ok, 那下边我们看,接着再看。哎,我们就把然后 reject 的方法啊,跟这个 get except 与 four 方法,是吧?把它干什么呀?把它然后想象成就想象在一起去执行,对吧?它本身就成为一个什么呀?成为一个切面 啊,成为一个切面,而我们用这个这种思想去就设计编码呢?这种思想我们就叫什么?就像面向切面编程的 思想,对吧?他具体怎么去实现,我们先别管这点能明白吧?啊?他其实具体实现大家想想还说学到现在呢,之前大家有基础呢,是吧?之前我给大家讲过,就是用我们的 proc 思想去做 跑水,是不带,是不带给思想,对不对?在这带给思想当中,你就可以选中什么呀?选中某一个对象 作为一个目标对象,比如现在这个对象就这个就红色框框,它属于目标对象,而内部这个 reject 就属于目标方法,对吧?我像对这个目标方法是不是在执行时再执行一个其他的方法,是吧?哎,我这个,然后 op 就这个对象,我会把叫做增强对象 啊,增强对象,而他内部的这个方法呢,就叫增强方法,明白吧?所以其实我们在面上切面编程时,他也有主词 次直分,是吧?那这个 reads 叫主方法啊,后面这个呢?叫增强方法。那不管谁叫主方,谁叫增强方法,其实在执行时,最终他们这方法是不都会一起执行? ok, 其实就我们一个 process 思想啊, ok, 到这呢?我们这个 l p 概念啊,就是大家威胁一下啊,之前讲过,你主要去对比我们这个面向对象,它是纵向的,而这个 l p 呢?哎,面向这个切面编程呢,是横向去抽取这种思想啊。

好,刚才我们已经分析完 supreme 练习的一个步骤搭建呢,下面呢我们就用我们的 id 啊去实现一下这个过程, 好,打开我们的 id, 课下呢,我已经建好一个 model 呢啊,这个 model 叫 id 黑马 stease, 我就以这个为我们这个练习一个工程啊,就在这个内蒙绕进行相的一个环境搭建。首先呢我们先看一下我们这个, 哎,这个 ppt 啊,按照步骤走,第一步创建工程就 perftit 和 model, 我已经创建好呢。第二步呢,导入我们的静态页面,当然这个静态静态页面我说过,他是为大家已经修改好的阶梯页面,是吧?这个页面在哪呢?哎,在我给大家的这个啊, 今天的内容当中有个叫素材,你点进去这地方有个叫练习的页面,你把这些页面都 coppy 到你当前的这个毛豆 下边的这个慢,下边的外版 app 下,因为这个文件还是比较多的啊,所以他在导入的过程当中可能需要 呃十几秒,甚至机子慢的可能需要二三十秒,所以在这我已经都靠不进去呢。靠不进去之后呢,我们先看一下这个工程,我把这工程啊就已经发布到我们的摊开内部呢,那下面呢,我们去看一下这个工程啊, 啊,就这个我们从头看啊,首先呢,你去仿他的手印啊,就在这个地方,在这地方我们要做哪些功能呢? 哎,这个地方有个用户,是不是个角色,对不对?都是不需要做的,当你点击角色时,你发现这地方会展示当前角色的列表,对吧?当这个列表都是从数据库进行读取啊,这个角色需要你自己进行维护, 所以这个地方有个新建,当你点击新建时,我们会跳转到一个添加角色的这么一个页面,对吧?比如在这里可以添什么 ceo 啊, cfo 啊,对不对?点保存,当你点击保存呢,你就跳回到我这个角色的列表页面, 能不能吧?好,今儿做完这个之后呢,我们再做我们的用户,对吧?当你点击用户时,我跳转到一个用户的列表页面,在这地方会显示用户的信息,对吧?其实跑出这个之外,你发现后面有个叫当前用户所具备的一个角色, 你发现张三,是不是?他是课程研究员,也是讲师,而我的李四呢,只是讲师,那这意味着一个用户他可以具备多个角色, 是这意思吧?好,那接着我们再看,那我是不是也可以新建我们的用户,对不对?点击新建时,我们新建我们的用户, 那新建用户时,这个地方贴用户的是不是?姓名对不对?密码、电话、邮箱的呢?在这地方会显示当前用户可以选择的角色,而这个角色信息是不就刚才在这个角色的地方进行维护的吧,他们之间是有有关系的啊,好,这个呢,我们一会再做 我们这个呃功能的时候,我们再会详细的去分析他。好,下面要回到我们这个 ppt, 我们接着再去看 啊,接着再看啊,把它关掉。那第三步呢?去导入我们的坐标,这个坐标也在我们的这个给大家准备好的内容当中啊。我们回到素材,你发现这个叫泡面插苗,你把这东西打开, 我们只靠配底盘,这些是我们需要的坐标。好,在这靠近一下,把它关掉, 然后回到我们的 id 当中,在这呢,我们点进去泡面插苗,把刚才那个东西一个扣屁好,都粘贴到这个位置啊,好,现在把泡面插苗关掉。那接着我们再往后看 第几步啊?第四步是吧,创建我们的包结构,对吧?这个包结构是不是三层架构加组慢,在悠久吧。下面我们在挨阶当中去创建一下,在我的扎瓦这个地方去创建 pk 值 c o m 点, it 黑马点。首先我创建我的外部层是吧?我叫 ctrunk 层啊,这外部层就 ctrl x 啊,好, ok, 创建好了吧,咱们看一下啊。好,接着我们再创建拍,开始秀 m 点, it 黑马点。第二层叫什么呀?右层吧, siri 层, 行吧,这个有包的层次呢啊,接着我再去创建我们的第五层,好吧,再创建我们的实体主慢层。 好,右键再去创建 我们的工具吧。优就是好,这步也完成,对吧?当然在这个地屋啊,这个 siri 咱内部是不是还有实线层?就是 impl 层是吧?一会再说。好,接着我们再往下看 第五步是吧?导入数据库脚本,这个数据脚本叫太子缩口,这个也给大家准备好。哎,我们看这 这一方啊,我们去导入他打开我们的小海豚啊,四个样右键,我们这一方有个叫 稍等啊,在这右键我们执行收口脚本,这个收口脚本呢?我选一下,在哪呢?嗯,在我们的这个此电脑 c 盘下边这吧,我刚才那个脚本桌面有一份啊,在桌面上这个 stry 素材是不是他呀?好,选中啊,执行。哎,成功完成,在这我们把它 f 刷新一下, 好点进去表,我们发现有什么呀?是不是原先只有炕的吧,而现在肉油子还有什么呀?还有个叫油子肉,一共几张表?三张表是吧?我们看 这个 u 字表对应的是不就是 id 主键 u 字,内蒙饮料帕索的是吧?凤男宝是吧?下边有些初始化的数据,然后呢,这个肉呢,就是我们的角色,有什么呀?院长,研究员,讲师,助教是吧?再看我们这关系呢 关系表是吧?哎,说这什么玩意,这个不懂,一会我给大家分析啊。现在你先把这个表先倒进去,那接着我们再往下看, 再往下看,再往下看呢?应该是第几步?第六步对吧?表倒完之后我是不是得有?有什么呀?有就用的实体,像我刚才是不有实体表,有个 u 字表是吧?有实体表是不是叫肉表啊?所以在这我要导入我们的实体 u 字跟肉, 在这为节省时间,我也不带着大家去创建的啊,我在这要导入一下,在这也准备好了,在我们这有个叫 pu 是吧?一个肉,这个油字扣撇一下,然后回到堵慢这一个粘贴进去 行不行?你看啊,我们看一下,我们这个油子是刚对应的 id 啊,油子内蒙以麦尔帕斯沃的 fnamer 是吧,跟刚刚表示一样的字段是一样的啊,肉呢?是不是有 id 啊?肉,内幕呀,是不是肉? ds 就 disipad 就描述的意思是吧? ok, 那接着再往下看, 再往下该到哪了?是不该到第七步吧,第七步是不是创建对应的配置文件?这个文件呢啊,还说顺便让大家复习一下,我们都是手动自己去创建,自己进行配置。

零基础学 it, 月薪过万就来黑马程序员?好,各位同学大家好,欢迎大家选择本套 spa 课程进行学习。 对于 spring 呢,我想很多同学都有所耳闻,在课程的开篇,我还是想从以下三方面从宏观上给大家介绍一下 spring 以及这条课程。 第一,我们说一下死不硬的重要性啊,就是为什么你要学习这个死不硬这个课程。第二呢,我们说一下课程的优势,以及你学习后的一个收获。第三呢,我们说一下本套课程的一个课程大纲。好,那首先呢,我们先给大家介绍一下死不硬的重要性。 死命这个框架呀,可以说是扎瓦最重要的框架,没有之一。我们业内呢,流传了这么一句话,说扎瓦成全都是死命。成 同学此话呢,虽然有点不太谦虚,但是我们的事实呢,几乎如此。我们可以毫不夸张的说,如果说丧公司赋予扎瓦语言生命,那么死不运就是该生命的延续,他会让扎瓦计划的更加强大。 现在扎成全在找工作时啊,死不能基础应用并不再是加分项,而是你是否能入职的一个合格线。 我们纵观招聘站点上对于扎瓦中级以上程序员的招聘要求,我们就会发现,几乎所有的企业都在使用死并进行项目开发,所以说你必须要会。 其次呢,中大型互联网公司或者高级开发程序对死病的水准要求也不仅仅是简单实用,你必须要达到一个精通的水准,所以说,不管你是否已经入行,都需要对死病 进行再次筛拉。而又根据我多年的开发经验呢,企业在进行技术选行时,谁和 spring 集成好,集成方便,最终谁就有可能被选中。可以说其他技术都有替代方案,而我们 spring 呢,哎,稳坐王坐,无惧撼动。 总而言之啊,就一句话,你不会死不定你就无法从事扎瓦相关工作。好,那死不定重要性呢?介绍完之后呢,我们再去看一下本套课程的优势以及学习的收获有哪些。 首先,企业实战案例全程贯穿,其实对于死病,互联网上的课程多如牛毛非常多是吧?而我们这个课程相比其他课程,它侧重于是技术和实践相结合,加入很多企业的真实呆梦,让你学以致用。打个比方, 使用自定义命名空间或 icon po 的注解,结合我们的病 pose poses 去完成企业通用级别的第三方框架集成方案。现在几乎市面上所有的四门课程都没有涉及到,而我们这个地方呢,会对他进行一个详细的讲解。 其次,我们的课程设计更加深入,在这道课程中,我们加入至少百分之四十以上的元给及关键圆码的剖析。学完本套课程,你不仅仅能从事基本的四平人开发,还能针对四平的复杂问题进行解决,亦或是自定四平的相关组建。 哎,比如市面上很多课程都在讲解柱姐这个知识点啊,但是他只讲解柱姐的一个基本使用,而我们这条课程呢,不仅讲柱姐的基本使用,还要从他背后的原理实现的机制,哎,还有就是 一些细节,逐一剖析剖析给你。最后呢啊,我们这个课程设计更加体系化,本套课程只是该死病课程,现在这个开始,后续呢,我们会继续发布死病伤态下的其他课程,后续的课程也都是在本套课程基础上,然后进行研发的。 哎,也就是说,你想学习死不硬的相关技术,只要跟着哎我们学习这一套课程哎就可以了。 我们整体说呢,这道课程是一套死命从入门到入土的课程,一站式通过死命,其中还加入很多企业实战原理和原码剖析,不仅适合小白,也适合已经掌握 sm 基本使用或者有工作经验的人去学习。好,那最后呢,哎,我们说一下本套课程的一个课程的大纲, 由于部分同学现在对死病相关技术啊,可能不是很了解啊,所以说呢,在这块呢,我就快速的盖药的给大家介绍一下。后边我们会详细的进行讲解。 本道课程呢,总共设计四部分,十七章。第一部分呢,我们讲解 ioc 基础容器。第二部分呢,我们讲解 aop 面向切面编程。 ioc 和 aop 啊是死不定的两大核心,这两部分包含很多基础点和实战, 同时呢,我们深入圆码进行讲解,为后续的学习打下监视的基础,学完这样感播后呢,你就可以已经从自从事死不正相关的开发。 第三部分呢,我们是要死不硬去整合我们的外部环境,该部分主要讲解的是死不硬整合外部的方式原理和整合外部层 mvc 框架的思想。 第四部分,我们说一下 spring 提供的外部层解决方案,哎,就是我们的 springmvc 啊,这部分学完之后呢,你就可以摆脱之前繁琐的私人开发,用更简单的方式去开发外部层的代码。 好有关本道课程的介绍我们就到这,优秀的课程呢,不能缺少在座各位同学的支持和帮助,欢迎各位同学一件三给大家转发,你们的认可才能推动我们源源不断研发出更多更好的课程。 如果大家在学习过程当中呢,遇到任何问题啊,都可以发布到评论区当中,我们会及时解决大家的问题。最后祝大家在扎了的道路上越走越远,早日成为技术大牛,我们课程中见!

好,那我们继续啊,在这地方我想过还是得强调一句啊,就说我们在配置病的时候,现在你要分清,就是在进行注入的时候,是吧?注入的时候,一种情况是我们自定义这个病的注入 啊,比如这种是吧?自定义病的这种注入,像这么 auto wearer quantifier 啊,你不能省, 能明白不?还有一种呢,就是我们这种非自定义的并啊,用这种方法的方式就是 at 并这种注解加方法去配置非自定义并,而这种非自定义的并的这种方法配置方式呢?你这个内部如果这个参数位置,如果想注入的话,你那个 auto where 是可以省掉的, 能明白不?所以你要区分开啊,你别回去给我开挖头。好,你就就在这个地是吧,把这个光给我写个属性 住不进去,还问我,哎,为什么我这光写个属性怎么住不进去呢?你不讲过奥特曼可以省吗?你得搞清楚在哪能省,懂不懂啊?哎,别瞎搞啊。 行吧,那回到我们的 ppt 当中,我们接着往下走,呃,这个非自定病的注解开发,哎,我们讲完了是吧?其实到这大家想,我们自定的病跟非自定的病,对吧?它的一个基本的配置, 包括他的,然后一个,呃,猪肉的配置,咱是不是都讲了呢?对吧?基本配置就是艾特 component 是意思吧,然后我们的猪肉配置呢,就是艾特奥特贝尔啊,等等等等。 那下面呢,我们就看一下 b 的配置类的主解开发,那什么叫 b 的配置类的主解开发呢?好,那现在我们回到代码,还说先不要看定义,我给大家解释啊,看啊,呃,看这, 我们比如说自定义的病,比如像 do 啊,像么? service 啊,我是不是直接在上面加个 conference, 加个 service, 加个 reposer, 是不是就能解决非自定义的病?是不是用这种方式?是不是? it 是不是能解决?大家看,不管是自定义的病还是非自定义的病,大家想其实都是干什么都是替代的,谁 是不是都是期待着我这原有的这个配置文件当中的哪个标签啊?并标签 这意思吧?哎,都是期待的原有配置文件,这个并标签对不对?可是大家想,如果现在我想把把把这个配置文件干掉, 你要把配置文件干掉的话,你这个并标签就是你这个配置文件内部是不是还有一些其他标签吧?能不能不?那这个其他标签咱是不是也得找对应的注解去期待,对不对? 所以说我们其实下边要讲的这个话题,这个这个知识点是干什么的?就是说完全去替代我们这个配置文件,就这个配置文件要不要呢?配置文件怎么不要呢?啊?我使用一个配置上的 a 去替代这个配置文件, 而非并的配置,像这些标签我们再去学习其他的一些注解去替代他,我说这意思,这,这能懂了吧?所以就记住啊,我们学我们学习这个啊,这个配置类的主页开发主要作用是干嘛?是使用配置类去替代我们这个配置文件, 明白吧?好,那下边我们就搞一个啊,怎么去搞呢?看着啊,在这呢,我再去创建一个包右键 package, 我叫 config 配置的意, 是吧?然后在内部呢,比如说我就建一个叫,叫什么都行呢?我叫 spring configer, 嗯,就叫 smartcat vig 吧。好吧,好,拍完了它跟谁相等?我用这个例去跟我当前的这个配置文件是不是划等号? 那意味着你那边的东西是不是都得转移到我这,我这位置是吧? ok, 首先呢,先啥都别干,在这加一个注解叫 configuration, 哎,这什么意思?好,我说一下啊,其实这个就主要就俩含义,第一个含义,标注 当前 b 是一个什么配置? b, 我加一括号,说完这配, 这就什么意思啊?就是替代我们那个配置文件的文件,对不对啊?这是它的第一个作用,当然还有个作用。还有什么作用呢?你点进去看一下,你发现这个 con configuration 上面是不是有个叫 component, 明白吧?所以它的第二个作用什么呀?哎,就是说,呃,标注 就这样吧,直接把 component 扔这得了,是吧?如果你在在它上面加一个 configuration, 问你 spring 会不会管理这个 spring configuration 给会,因为你上面加 component 的呢, 明白吧?好, ok, 是这个啊,好,那现在呢?你写完它之后,它只能跟我当前这个配置文件是不是相等?是不相等,但这个配置文件内部刨出 那个并之外是不是还有这些配置?咱先看这个,这叫什么呀?组结扫描是不是?你是不是也需要组结扫描吧。那怎么去搞啊?怎么去搞啊?这就说呢,因为这个就是我说一耳朵,你听一耳朵,学会就完事了,对吧?这没什么绕绕的是吧?在这地方我加个 叫 component skin, 看有没有是不 component skin 吧。好,那这个 component skin 点击看一下。 哎呦,有,有这么多是吧?这么多。他有个 y 六是吧?干嘛?是不是跟这个被子拍给就被子拍给这丝一样是吧?就是你需要,然后注入哪些 就提供哪些,要基本报名是吧?所以在这你可以写一下括号,括号。哎,我把这个给你拷贝过去啊,把这 copy 过去, copy 扔到这儿啊。这个 command skate 就相当于我这个标签 commandance skate 是吧?内部得需要什么?需要一个 base package 四, 它是个数组。为什么数组呢?因为你可能加载多个包,明白吧?哎,你 copy 中指这样写,当然这个可以省掉,不写。 那如果当前你只有一个基本包,那就可以把这个数组也去掉。不写 能懂吗?就你需要多个的话,你加一个大括号,是不是写多个基本包是吧?那现在如果一个包的呢?我就这么写就行。哎,这就是盖王的,这简单吗?再看下一个。我这 还有这么一句是吧?叫 purpletip is holder 啊,好扔这儿。那它有没有对对应期待的注解呢?有什么呀? 哟,什么呀?找一个注解叫 s property soft。 这个, 哎, property south, 你看这 property miss holder, 你 property south 是不是一个意思啊?属性资源是不是在哪?你是不是这么写的对不对?你把这东西干嘛扔这, 那就解决了吗?这,这点能明白不是吧?那如果你看一下他如果是多个呢?你看他是不是有数组,是不是也有数组形式,对吧? 那回到这,如果你是多个,要加载怎么办?跟刚才一样,就就这么写是吧?后边再写个其他的就多个,然后需要加载 poct 资质文件啊,写多个就行,但是我现在就一个,是吧,我就这么写, 能明白吗?这写完了,写完之后你再回到看配轮去,哎,配轮是不是,是不是?目前这些是不都替代的吗?好,那下面我们去测试 啊。我们测试啊,怎么去测试呢?回到我们的测试代码,把这些我都删掉,但这句不删。为什么呢?看着他加个注视, 现在这句代码啊, class pass obligation context new in class pass 肯,那个 obligation context 是吧, 它是加载的配置文件的形式。还记得我们在这个这套课程中,一开始给大家讲的时候,我们这个这个 application contex 开始看一下它啊,呃, 怎么没有了? shift shift, 稍等。 呃,给 k 是 contacts, 我想看他原码。 c a, 天,我写错了吗?当然不是它呢, 推神 com c n t context mo 是吧,改下 mo 吧。 t e n f g ctrl x。 哎,怎么没给我显示呢?这样这样看着啊。回到这,回到刚才我们测试代码关掉,测试代码在哪?然后先把这些都关掉。啊,这呢是吧, 我点进去点 patient context 有吗?没有没有,你就点吧, 我是不是肯定最终能找到。回去,回去,这, 姐,是不是这呢?这是不是那接口我就找他啊,关闭其他的是不是就找他? 好,那找到它之后呢?我 ctrl h 一下,看它的实线,当时我们说是不是这么说过吧,你往下走,往下走,走走。哎,你会发现当时我们在看的时候,我们刨出有那个插苗形式的在上面呢, 这个吧,我们是不是,我们是不是一直在在用这个?是不是当时大家讲过这个跟上面这个都是去加载插苗的, 而现在我的核心配置,那个配置就不是个文件的吧,我现在核心配置是不是已经是一个核心配置站 gay 呢?是吧?所以我们就不能用它呢?那用谁呢? 哎,不对,不是这个往下走。这呢?啊,这是 web 的是吧?我们找一个不是 web 的叫 annotation, 这呢叫 annotation configure of complication context, 它是加在谁的?它是加在我们这个,就是以以这个核心配件类的方式啊,就注解的方式去做核心配置文件的,所以我们就用它作为我这个 speaker 中期客户端的, 也就意味着你再去写的时候应该怎么去写,把它关掉啊。 这是叉 m l 方式方式的 spring 容器, 对吧?而现在呢,我现在不是插苗方式呢。我现在什么方式?注解方式?注解方式啊,去加载什么呀? sprain 的核心配置就不是文件的啊,核心配成 gay 对吧?我们给 case context, 你去虐谁呢?虐谁啊?就刚才那个叫 annotation configure 啊,帮你切成 context 是吧?它这个地方需要参数,这个参数是谁? 你看插苗形式的,我加载是不是核心配置文件,而这个地方我是不是把这核心配置文件变成谁呢?是不是核心配置成 g? 所以说你把那个 config 这个 spring configure 的那个写到这第二 plus, 能明白吧?那想着我通过这个容器就是 get, 并他说 get 谁呢?呃,还说你就开 get service d o 是不是都行,是吧? user d o 制定好,我们先看能不能实现它 这么慢呢啊?打印呢是吧?在这能不能实现 打印有点多呀,是吧?打印的有点多啊,我之前那个代码。哎呦, ip 这这有打印吗?打印的助教呢是吧? 这是读助教呢。 service 是不是要打印的是吧? 哎,打印这不也注掉了吗?哦,是在那个 author 那个地方打印的是吧?好,我们找到 other 把它打开,把这些打印都去掉啊,注掉它。那现在我只剩是这个地方打印吧。好,我们执行 可以吗?是不可以的。那意味什么?意味?现在我加了的核心配置 a, 它内部是不是配置箱的东西呢吧?然后配置是不是组件扫描的 是吧?是不也配置,然后对应这个这个 gdp properties 加载呢?是不是都配置完毕之后,最终我自己配置这些 compoint 的 reporter 是不是也都能生效?而且说的直白一点,这个没 没多难。他其实就是以什么呀,以这个核心配置类去替代我们原有的那个核心配置文件,当你然后替代完毕之后,你再去要使用这个 spa 容器的时候,就要摒弃我们这个插苗方式的了,就需要用谁用我们这个哎,注解方式的 去加载我们的核心配件配,最终呢也可以进行项的一个变质获取, ok 吧,那其实我们接着再说啊,再说我们当时在这个配置文件当中啊,还是说刨出这些之外,我们还有一些像这个 import 是不是导入外部的文件嘛?对不对?那现在我能不能也像导入外部的文件一样,在核心 pit 当中导入其他一些 pit 的啊?能不能是不可以啊?打个比方啊,打个比 比方,然后找到我们刚才那个 other other bin, other bin 他是不是听个 desert 是吧? ok, 那现在我这么干啊,我把它住掉, 注掉之后,这个 darth south 还能不能获取到?你比如说在这我测试啊, data sauce 还能不能获取到?是不能获取到的。也刚才说你你这个,你这个方法要想被识别,首先你当前这张 gay 是不死不了,你得去管,然后那边的方法 i d b 是不是才能被识别?好,那在这儿你再去执行, 他是不是会报错吧,是不是找不到就是 south 啊? no name 就是 south 是吧?但是我如果把这个 other 背也看成是我一个,哎。 patient gate 啊,一看这个 patient gate 的话, 是吧,我是不是能把它这个配上给加载到我那个核心的?配上给当中就加载到 spring 当中? spring config 当中是吧?怎么去加载呢?我说一下啊,这就相当于我们那个配置文件的那个谁, 就相当 import 吧。哎,相当 import, 回到这我扔这是吧,它有个注解叫 import 下载谁啊?是不是 art 这个和 copy 扔到这点儿 c l a a 三十找个包, 行吧,那加了进去,那说明我这个 other b h 比也成,为什么呀?也成也是一个配成 b, 但是呢,它是个分的,对吧?那总 总的在哪呢?总的就是我们这个死病 configure, 我是被加载进去的吧,加载进去之后你再去执行, 你发现行不行,是不是今儿 saws 就 ok 了嘛?这能明白不? ok, 就这意思啊。所以说,到现在 到现在,我们在进行注解开发时,我们是不是就可以不用我们的配置文件的了?完全用这种,你可以认为是这种全注解的方式就死不应还清的一个全注解的方式是吧?用核心配置 b 去拆支我们代替我们的配置文件就 ok 了。 行吧,那回到我们的 ppt 当中,我看有没有些其他要讲的,是吧,这地方我们说过的吧,哎。 configuration 这是不是说过呢?是吧?还有就是 company skin 是不是也说过呢?它是干嘛的?它进行组建扫描的对不对?再往下走,哎。我们的 public south 是不是, 是不是加载那个外部的 gdp protect 文件呢?是吧?还有就我们的 input 刚才是不是也用过的吧?它是加载然后其他配置类的 ok 到这我们这个并的配能类的主页开发。哎,也学完了。

好,同学们,接下来我们就开始今天的第二章, rabbit mq 的快速入门, 在这一章当中啊,我们会去了解一下 rabyten q, 并且呢去安装它,然后我们会给大家介绍一下 rabytem q 当中的常见消息模型,最后呢我们还会带着大家动手呢,去写代码,看一看 rabyten q 它如何实现这种意步的消息通讯。 好,那接下来我们就进入第一部分啊, rabbit mq 的一个简单认识和安装。 rabbit mq 啊,是一个基于啊浪语言开发的开源消息通讯中年间, 而阿浪语言大家可能不太熟,这是一个面向并发的变成语言,天生就是为了分布式系统来设计的,而 rabbit mq 基于他来 完成,自然就具备了这些个特征,那因此他的一个性能,吞吐量都还是相对来讲不错的啊。但 rabomq 最擅长的其实是消息的可靠性,稳定性,整个系统的这种高可用啊。 那这里呢是 mq 的一个官方网站,我已经提前打开了啊,大家可以看到啊,这个网站啊,这上面有一群的兔子,那另外呢,这边呢还会有一些文档,那大家呢,如果想要去学习 mq 最好呢基于这个文档去进行学习啊, 好,那现在我们再回到 ppt 啊啊,那在这里呢,我们就带大家去安装一下 rabyten q 了啊,安装方式呢,可以参考课前资料, rabyten q 的部署指南, 我们打开看见资料可以看到呢,这里有一个文档,然后咱们 q 不输指南,我们把它打开。 好,那接下来呢,我们就来完成这个部署,这个部署呢有单击部署和集训部署两种方式,我们呢就来看单击部署就行了,我们将在三斗司训练机当中利用刀砍来进行部署,因为这种方式是最简单最方便的嘛。 啊,那第一步肯定是要获取刀壳的镜像了,那么这个镜像大家可以去直接 po 拉取,也可以从科研资料当中去导入这个踏包,而导入的方式我们之前已经讲过了啊,就是利用这个刀壳 low 的命令来完成导入,对吧? 那么下边呢,我们就来打开我们的训练机,我们通过 docker amidis 先查看一下我们本地印象。啊, 好,可以看到,我这里也没有 mq, 对不对?那接下来呢,我就按照刚才文档中所说把它导入一下,那我们打开, 哎,课前资料这里呢有一个套包,现在呢,我们把它上传上来啊,那上传到哪里呢?我们上传到这个 tmp 的目录吧,这临时目录嘛,我们把它拖上来。 好,我们可以看到一百多兆啊, 好,上传完成,完成以后,我们再次回到这个小控台,然后通过一个命令来安装啊,我们先进入天平部路看一眼,有的吧,怎么导入?同学们,命令是什么?告诉我 刀干什么 low 的,干啊,哎, mq 点踏,哎,很好啊,走 好。经过一番安装,我们发现导入成功了,我们通过 docker images 查看一眼,发, 发现这里导入了一个名为 rap mq 版本呢,是三杠 management 的这样一个镜像,已经成功导入了。好,那第一步我们就完成了,我们再次回到文档看一下, 导入了以后,下一步自然就是安装 mq 了,运行这个刀口 rad 命令吗?那这个命令呢?在这我已经给大家贴好了, dock run 杠一 杠一呢是给我们的 mq 设置一个黄金变量,黄金变量我这配了两个,一个是 user, 一个是 password, 也就是用户名和密码。将来我们需要去访问 mq 或者是登录他的管理平台,都需要用这个账号和密码, 再往下干个 name 呢,是给他起个名字,这块呢是配置主机名,不配呢,也没问题,但是如果将来做集群部署就要配这个东西了。杠批呢是他的端口映射,这里我们开放了两个端口啊,一 个是幺五六七二,这个呢是 raby 咱们 q 的管理平台的端口,他会给我们提供一个 ua 界面,我们去管理起来就非常方便了。第二个五六七二呢,是将来做消息通信的一个端口,也就是说我们将来发消息,收消息都要通过这个端口去建立连接。 杠地是后台运行,最后呢是镜像的名称。好,那下边呢,我们就把这个命令啊给他敲一下,我们回到下个控制台,然后在这呢进一个粘贴回车 好容器创建完成,我们通过刀砍 ps 查看一下是不是成功的启动起来了。启动起来以后呢,我们就可以去访问了啊,他端口我们刚才讲了,幺五六七二是他的什么端口啊?是不是空了台端口,所以我们只需要在浏览器里访问这个地址就能够看到了 啊,那现在呢,我们就打开浏览器,在这里输入训练基地地址啊,幺九二点幺六八点幺五零点幺零幺,端口呢是幺五六七二,大家记住这个端口啊, 好,回车可以看到呢,成功的进入了 raby temque 的管理界面了吧,这里啊要输入一个账号和密码,我们刚刚在刀口 rat 命令中啊,指定的是 it cast, 密码是一二三三二一,点击 log in, 这样呢就成功的登入了我们 rabbit mq 的一个管理平台了。同学们, 那么在这个界面当中有很多的东西啊,大家现在都不认识啊,没有关系,等一会呢,我们就会一一给大家介绍。那首先呢,这第一个界面叫 overview, 就是总懒,那么这个界面呢,主要就是 mk 的一些节点的一些详细信息,当前我们是单节点运行,没有集群吧,所以节点中只有一个,然后呢,后边是他的这个硬件的一个信息啊, 然后在这儿 connection, connection 就是连接,将来无论是消息的发布者还是消息的消费者,都应该跟我们的 mq 键连接吧,所以这个 connection 呢,就是连接, 而前头呢是一个通道,将来我们建立连接了以后,一定要创建一个前头通道, 然后生产者或者是消费者才能基于钱脑完成消息的发送或者是接收啊,所以你可以认为钱脑是 mq 当中做消息发送也好,接收也好等等各种操作的一个具体对象了啊,将来每一个连上来的人都应该去创建一个或多个通道啊,再往下呢, x 欠着,这个叫交换机,他是一个消息的路由器啊,就跟咱们那个教室里边的路由器交换机效果是类似的。然后 q 呢,就是对列了, 对列就是来做这个消息存储的啊,那现在呢,可以看到还没有任何的对列吧?刚才交换机看到还是有一些交换机的啊,但是没有对列 好,那最后奥特曼呢?是叫做管理,那么在这个界面当中,我们可以去管理当前这个呃用户信息啊,比方说我现在是不是有个用户叫 it 卡死他呀?那我还可以干什么呢?在这创建更多的用户, 比方说我现在要创建个用户,我只需要在这点击爱的 uzer, 然后在这呢给用户起个名字啊,比如说就叫李四,然后给他起个密码,比如说一二三,一二三,那这样一个新的用户信息就填好了,这里还可以给用户分配一个这个 呃角色啊,比如说艾特曼呢,是超级管理员啊,这里的 money 特呢,就是一个系统监控的啊等等,我们可以去选,比如说选艾特曼啊,超级管理员,那么这个信息呢,就成功的提入到这里了,最后点击艾的 user, 那么我们这个用户就添加成功了, 但是你发现啊,当我新增一个用户以后,他其实是没有任何访问权的,看到没有?没有 no access, 那这个是因为什么呢?这里有一个说明啊,大家可以看到叫做 virtue house, 虚拟主题 啊,虚拟主机啊,虚拟主机是什么呢?是我们 mq 当中的一种逻辑划分,将来我们会有很多个用户,对吧?那这个埃迪卡斯的用户,他来操作我们的 rabbit mq, 创建自己的队列,自己的交换 机等等,那么我们的李四用户也来做这些事,那这两个人在操作过程中是不是有可能产生冲突啊, 那为了避免这种问题的发生啊,我们就有一个叫 virtue house 虚拟主机的概念,那通过虚拟主机对不同的用户进行一个隔离,大家互相看不到对方的东西,这种呢就称之为多租户的一种处理了,对吧?是一种隔离,这就是虚拟主机的概念了, 虚拟主题目前啊默认只有一个,就是斜杠,那我们还可以通过在这玩手 houses 创建更多的虚拟主题,比如说添加一个新的名字呢,也可以随便取,比如说就叫杠, it cost, 然后在下边呢,还有这个虚拟主机的一些描述信息啊,你也可以写,也可以不写好,点击添加,你看一个新的虚拟主机是不是创建好了,现在我们再次回到 u 字界面,在这个界面当中呢, 我们可以看到艾迪卡斯用户具备杠和艾迪卡斯访问权限,而李四还是没有任何权限,而你点击用户信息了,就会进入用户的视力界面,你可以给他分配权限啊, 怎么分配呢?比如说我让他访问爱迪卡斯特,那这样呢,点击赛的 permission, 他就具备了对爱迪卡斯的这个虚拟主题的访问权了。那我们再次返回到优乐界面,可以看到是不是有访问权了, 然后呢,我们还可以点击到交换机的界面来看一眼,在这个界面当中,你会发现啊,虚拟主机杠和 airicast 他们所具备的信息是不是一样的, 也就是说呢,这里面虽然名称是冲突的,但是呢,因为虚拟主机不同,他们是不是给被隔离开了?一般情况下,同学们,我们回答的跟你见面每一个用户应该由自己独享的虚拟 主题啊,同学们能理解的意思吧,好比方说我的艾迪卡斯的,我点进去我就让他只具备杠的防御拳,不具备这个艾迪卡斯的防御拳,那这样一来,他们两个的业务是不是就被隔离开了,互相就看不到对方的这个内容了? 那这就是我们的这个多租户以及这个虚拟主机的一个隔离了。行了,那 mq 的安装就完成了,下面呢,我们回到 ppt 来看一下我们这个 mq 的一个整体结构啊,刚才其实我们已经给大家做了简单介绍了,这边 population 呢,是我们的消息发送者,看修门呢,自然就是我们消息的消费者, 他们的意思呢,将来会把消息发送到 x change, 也就是我们的交换机,交换机呢,负责路由,再把消息投递到 q 对列,对列负责斩存小。 而后呢,我们的消费者再去从队列当中获取消息,然后处理消息,整体呢,就是这样子的啊,那你会发现呢,这里有一个叫 vershow house 的一个概念虚拟主机吗?将来我创建了一个用户以后, 他呢会有自己的一个虚拟主机,再创业,新的用户再有虚拟主机,那各个虚拟主机之间是相互隔离的,看不到的,这样可以避免干扰,这就是整体 mq 的一个架构了啊, 好,那最后呢,我们来做一个总结, rabbitom q 当中的几个概念,第一呢是 channel, 是操作 mq 的工具啊,你做消息的发送也好,接收也好,都必须要用的 channel。 x change 是消息陆游,将来消息发送给他,他在陆游给对列。对列呢?当然就是缓存消。 记得了 versa house 的虚拟主题是对 q x 限制等等这些东西资源。那个逻辑分组啊,将来呢?给它隔离起来,不同用户可以访问不同的虚拟主题。好,那我们这节课的内容就到这里。

好,说完死兵并的概念之后呢,那下面我们就进入死兵的快速入门,死兵的快速入门呢?我们先做一版变 factory 版的啊,那为什么要做别 factory 版的?因为这个更符合我们的一个思维定式,因为我们一直在讲这个第三方是谁啊?第三方是不是就是我们的变 factory, 通过工厂模式去闪上变是吧? 好,下面看这张图啊,看这张图,这张图之前给大家看过,但是呢,他跟之前有些区别就在于这多一部分啊,多的这部分配置清单是吧?为什么要多这部分呢?大家想想我们这个过程啊,首先说我们程序代码要使用某一个并, 那我是不是要找第三方,但是第三方是不是得知道他帮你产生哪个病吧?就是哪些病我得提前是不是给你产生好,然后你再获取的时候我要给你,所以我怎么知道会产生哪些呢?我就把需要,然后第三 下方就是一个并工厂产生的并配置到一个配置清单当中啊,说白就是一个文件一差苗文件,你配置到这个差苗文件当中呢?第四就是别翻水,再加载这个配置文件之后,他就能帮你产生这样的并要乘以代码运动获取呢, ok 吧,就通过这张图呢,我们来去看一下他的开发步骤。首先说这个第三方啊,这个变翻水啊,兵工厂,他不是我自己写的,他是死不正提供的,所以说我们第一步就需要导入死不正对应的坐标, 可以吧?那第二步呢?第二步你不要产生那个病,你是不是得准备这个病吧,所以我得编写这个病的代码,对不对?所以第二步我们就去编写一个 uzis 啊,在接口跟他的实现啊,这就是我们的病呢,但你写个普通的对也可以,是吧? 那写完之后你是不是得配置到清单当中,最终是不是才能帮你产生?所以说第三步,哎,我就要创建 biss, 点插苗一个文件,当这个配置文件名字叫什么都行啊,你需要做的是把这个 uzacevsnp 配置到这个插苗文件当中, 但是第四步呢?第四步其实就是写测试代码的,是吧?我需要通过这个兵工厂去加载这个配置文件,然后呢成为代码,通过这个兵工厂去获取军人的兵, 他就这个意思。所以第四步就编写测试代码,创建 be factory, 加载配置文件,然后获得 you the service 这个对象。好,那下面呢,我们就一步一步给大家去做, 我在这已经创造好一个空城的啊,这个工厂是个空的啊,这个工程是个空的,呃,他就是一个普通一个民用工程。那按照步骤,第一步我们要干嘛呀? 哎,要导入对应的这个坐标是吧?导谁呢?我们在这就导入死不硬刚太死就行,五点三点七的,因为当你导入死不硬刚太 ctrl tax。 啊,我们在这刷一下啊,已经有了是吧?啊?底盘呢?谁内部就导入这个坐标,这个包,他内部是不是已经导入像 aop 啊, b 四啊, core expression 呢?这些都是刚才我看那个 sprime football 那个技术战图当中说到最核心的部分,是吧?他内部已经帮我引入了。 好,这个我们知道就行,导致我第一步完事。第二步呢,我需要创建 uccivs 的接口跟实现,就创建一个并,是吧?好,在这我去写这个并的代码 com 点 it 黑马,然后点思维斯, 让内部去创这个 uzi siris, 他是个接口, 内部就不写,什么方法呢啊。然后接着再往下边再去写一个按漂包,下边的优折设瑞斯按漂 好,他需要实现右的思维,借口,右就对他一个产生对象,他对他产生对象好选之后呢?第二步是为完事呢吧。第三步,我们需要配配置文件, 所以在这个下边我们就创建一个叉苗往下走,他下边有个叉苗 cafe reach fuel, 你发现他内部已经有一个叫死不认可 facebook 了,哎,这是为什么呢?就是因为我现在导入死不能做标呢,挨地本身能检测到啊。好点一下,我们就叫并死角差苗, 行吧。哎,就这样的,他已经帮你自动去导入一个 schema 的一个头呢。配置其实很简单,你看有提示我们就配个并就行,这个必须 叫配什么呢?其实就是配置当前这个优则思维赞片的一些信息。好右键,我考比他一个全县的名。首先我得知道这个病在哪就他在哪,是不是才能创业对象吧,所以我要搞一个科大四 来把它写到这。其次呢,我就为他起个名字啊,就一个唯一标识 id, 我叫优泽 siris, 他的作用是一会我可以通过这个名字去获得他的一个时间的对象。好配置就完事了。这第三步是吧?第四步呢,我们去创一个测试代码。 哎,我就在这下边,我就在扎,我就显得不在这个太子这显得啊,好在下面,因为我总跳,有时候比较麻烦,因为现在是讲课吗?对不对?所以在扎我。下面我去创建一个抗点 it 黑马,就是太子掌啊,点,我就叫斌 factory, 内部呢,我就提一个慢方法。 好,我先写,我给大家简单的去介绍一下,是吧?首先第一步要干嘛呢?我需要创建一个工厂对象, 对象是吧?那第二步呢,我需要创建一个读取器, 读一期读什么呀?就说白就是读那个差苗文件, 行吧。好,那第三步要干嘛呢?这第三步就是将工厂跟读取器绑定一下啊,就是读取器读取器 去去绑定我们的工厂,因为读完的东西要给谁,是吧?给工厂,对不对?就绑定一下。第四步呢,其实说白就是获取什么呀,就是根据那个 id 啊,获取并胜地并局项 啊,就是四步啊。第一步呢,我们看一下创业工厂对象啊,在我们这个随便当中,他提供一个啊,就是 bikes 的实现,叫 defold mr 宝 be factory, 卬们就叫 be factory, 扭一个 default display factory, 就像创作完毕呢。第二步呢,创建一个主曲器,因为当前我是插苗的配置方式,所以我需要创建一个叫插苗 benefits reader 啊,就叫 reader 吧,扭一个插苗 beautifulness reader, 对吧?在扭的时候他有个参数,这参数是谁呢?其实就是这个 be factory, 哎,就把变翻出去给他,是吧?那第三步呢,我就使用这个 reader, 干什么去加载变 diffination 啊?加载他,在加载时,在加载,在加载时我要把那个配置文件是谁要告诉他啊,告诉他这个不应该叫读取绑定工厂呢,因为叫读取什么呀?配置文件是不给工厂是吧?读取 配置文件,然后给工厂, ok, 那这地方就是 oppo vk 深啊? 不是啊,是并思点差苗吧。并思点差苗我这个文件名字是不是并思点差苗对不对?好,那完了之后再往后走呢?再往后走,其实我也可以通过工厂去获取并的, 他有个方法叫盖着并盖着并,根据什么获取?刚才说是不是根据这个名字吧,叫 you the service 获取,但获取完之后呢?他这个,哦不,这个的就是那个类型,已经给我擦除了,是吧?你可以自己强转一下,你也可以不转啊,比如我强转一下吧,我强转我就。我知道他最终返回的是个优德 coves, 对吧?我就把他强行转化一下, 然后呢,最终我在这打一下他的地址,如果他不为空,那证明是不是死不定这个兵工厂已经帮我踩成这个病的吧。好,我去行,他 稍等看控制台,哎,是不是最硬能打印出这个对象,是吧?所以说到这个,到这个地方,我们这个 be factory 版的快速门啊,就给大家,然后说完呢,但这个这个测试代码相对还是比较麻烦的, 哎,后期当我们学完这个 omek kittencom text 之后啊,接着完他之后,他的快速们要比这个要简单一点,因为那个 omekatoncom text 底层把它给封装了, ok。

好吧,那介绍完基于扎苗死不人应用啊这些东西之后呢,那我们就一个一个去学习,首先呢,我们先学习死不人并的一些基本的配置啊,也是一些比较基础的东西,那我们来看一下, 首先呢, spring 在开发当中啊,主要就是对我们的并进行配置啊,主要就是刚才我们在我们的这个, 呃,配置文件当中对于那个并标签的配置是吧?那这个主要配置有如下这么多,我们稍微过一遍啊,每个都会详解。第一个呢,然后主要是配这个就是并的权限的名啊,这个我们已经配过了,然后给他指定一个 id 名称,这个 id 的名称是在配置文件当中这个并的一个唯一标识。 那这个 id 呢?后期会转换成并,在容器当中一个并内幕啊,并内幕,这能能跟上吗?并的名称明白吧?就这个地方配的是 id, 但最终他到容器当中会转化成一个并的内幕,而我们盖的并时,其实通过什么获取的,哎,我们在之前用到的盖的并那个块的那个参数,其实不是 id 啊,他其实是并内, 明白吧?哎,是并的名称,只不过配的 id 后期会转成容器当中的并内啊,这个大家知道,下面呢就是配这个, 第二个呢,就是配病的别名,哎,你发现这个有内幕是吧?就是拍电台配内幕吗?就是说一个病可有多个名称 啊,就像你一样把你叫张三是吧?你是不是小名是不?狗子猫子是吧?这都叫小名是吧?这个内幕主要是配什么?主要是配这个并的小名的,也就是别名的啊,配别名的。 呃,所以说我们在盖的壁纸呢,我们其实不仅可以根据这个 id 啊,这个 id 是获取的,那后期然后配这个内 内幕呢?他这个也可以获取照,就是我可以根据 b 内幕获取照,也根据别名获取照啊,我们就是一起演示啊,下边是 scope, scope 什么叫范围啊?就并一个作用范围。那什么叫并的作用范围呢?其实在这我们讲的直白一点就是并呢,在末日情况下,它其实就存在于一个,就是当地的 就死兵容器啊,帮我产生一个并对象,比如说我们的 siris 对象是吧?这 siri 对象有几个?就一个啊,就一个放到那个麦访,放到容器当中是吧?你在获取的时候就把一个给你是吧?但是有的时候呢,你可以然后修改次告访啊,让这个死兵容器帮你。在产生这个病的时候可以产生多个, 那多个他就没法去存在这个容器当中的,是吧?就是你每次在盖地被时,他都会创一个新的,然后返回给你,因为你说多。有的时候为什么多个就不能存容器呢?因为多个你到底有多少个呀?多个多少个?三个是比较多, 五个叫多个,一百个是比较多个。那死不认也不知道到底要几个啊?不可能一开始咱也搞一百个存容器存着吧。那也不行啊,那性能有问题啊,对吧?一会我们再讲 sgo 吧,就是他一个作用范围啊,再往下走, vc 以内。这什么呀? vc 你想 什么?延迟加载啊?延迟加载,我们刚才已经给大家对比过呢,我们的四部容器就是 omgpa 成 comtax, 他末的情况下配置文件一加载对吧?容器一创建,我这个币是不是就都啪啪啪都给你创建好是不是放到一个位置是吧,等待你去该你去获取对不对? 哎。缓存提前给你缓存好,但如果某些病啊你在配置时你配置能给自己内在哪一处?那衣服是干什么?我不需要你马上帮我去加载配置文件的时候就把这个病给我创建好。那什么时候帮我创建呢?就跟那个病犯 水冰工厂一样,我什么时候盖的被式你什么时候再帮我创建啊。延迟加载好再往下走 intimates 的这个地方。 intimates 的初始化方法 啊。出水化方法就是当你这个病在创建完毕之后啊。哎,可能你可以要执行一些出水化的操作,我就可以在这个地方通过配置的方式指定这个病内部哪个方法可以作为出水化方法。那这样的话当病疗创建完毕之后他就会帮你就死不认啊,会自动帮你去调用出水化方法。 有人说我们不是有那个构造方法吗?构造方法是构造对象用的触手法方法是等对象创建完毕之后再帮你调用的触手法方法。他是有个时间差的啊。再往下走第四代没事的,销毁方法 就这个病在挂值前。哎,我是不是可以然后执行某些方法是吧,这个用处不是特别大啊。再往下子 啊。熬出来。这什么意思?熬出来代表然后自动注入啊。自动注入,哎又是注入呢是吧。我们之前注入是配置吧 啊。我们应该注入是可以配置通过盘把铁丝吧,通过赛的方法,在我们的代码当中赛的方法,哎,可以注入,那如果,然后你不配置情况下,我能不能从容器当中自动去来找到哎,你想要的这个东西帮你扔进去的。 哎,也可以啊,我们可以设置自动啊注入的方式,奥特贝尔啊,可以 by type 啊,也可以 by name, 就是通过类型,如果你配置完毕之后呢,那这个并,然后内部,比如说,哎,他这个有这个对应的 set 方法是吧? 啊,他会自动的,然后从容器当中找类型匹配的或名字匹配的这个并自动给你扔进去,你就不用每次在学然后 purpletes 啊,人为去写 purpletts 进行 输入呢啊, ok, 那再往后走呢? be factory 啊,呃,跟这个不是 factoryback factory messer 的,这个涉及的是并的,然后这个创建方式,这个我们一会再给大家讲这个地方,然后一句话半句话我们说不明白啊。 行吧,这是关于我们这个并标签,其实涉及的主要的配置在这基本哦,都在说全的啊,当然还有一些可能不是特别经常用的基本,然后你一辈子见不着一次的啊,在这我就没有涉及啊,就非常少呢,这个地方已经非常全的啊。

上一节呢,我们了解了一下 spen 技术该如何学习,那从这一节开始,我们正式进入到 spen 知识的学习。在第一节呢,我们先来聊两个话题。第一个话题是了解一下 spen 大家族。 spring 不光是一门技术,他还是一个家族。我们先了解一下他的家族都有哪些东西。接下来咱们再来说一说我们要学的这门课程, spring 技术,他的整个演化过程,发展过程,这样有助于你对后期知识的学习。 那么对于 spring 家族来说,我们从何说起呢?我们先从他的官网看起来,打开他的官网 sping 点 io, 看到这样一个官网,你会觉得和我们现在看的很多网站不一样,他的 结构非常的简单,内容呢,也比较的简单一些。对于他的整个主页来说,给我们提供的信息,最重要的一组就是你现在看到的这组信息了,讲的是什么呢?死不硬能干的事情。 那么这里边有大家非常熟悉的东西,比如说死病能做外部开发,当然死病还能做微服务的开发,可能有些同学听说过。 除此之外,此朋友还比较擅长做分布式系统的开发。光这三点就已经占据了现在加挖 e e 市场主流开发的九成以上了。那么接着我们再来说 spring 并不是一个单一的技术,他实际上是一个大家族,他都包含哪些东西呢?在普洱介词里 介绍了 spa 所有的技术,点开第一个概数进来以后,我们会发现这介绍了 spa 所有的技术,下边每一个单元就是一个独立的技术。 那么这些技术呢?组成了 spa 的整个大家族,点开任何一个技术名称,在左边列表了他所有的技术名称。位置靠前的,相对来说是重要度比较高的,也是现在在市面上省量比较大的技术。 好,回到我们的资料上来,对于 speing 来说,他既是一门技术,他也是一个大家族,里边包含了若刚个项目。因此现在的 speing 已经不单单是帮助我们做一些简单的开发了,他已经形成了一套自己 独有的开发的生态圈。什么意思呢?就是说你可以完全在 spring 的解决方案下,把你的项目给构建出来,并且设计开发完成。而里边的每一个项目都有自己独立的功能,根据你的使用需要来进行选择。 基于这样的一个特征,我们说你开发完全可以在他的技术战中进行选择。就像你去一些快餐店吃饭的时候说我要这个,我要那个,我要那个。 哎, spa 现在就可以做到你用这个,用那个,用那个,几个组合在一起来,把整个项目开发出来。因此,对于开发界来说,给他一个非常好听的名称, 叫做死不硬全家桶。来一桶,里边什么都有,能帮你做很多的事情。这么多技术,我们不可 可能全部都学习,我们要学习哪些呢?第一个要隆重介绍的叫做 spring framework。 framework 翻译过来叫做框架,这是 spring 所有技术中的第一门技术,也就是说 spring 最早出现的就是这门技术,而我们这门课学的也是它。 那么他在整个全家桶中的地位如何呢?其他的所有的技术都是依赖他执行的,你就知道了哦,他是一个底层的框架,他是一个设计型的框架,所有东西都能够放在他上面运行。 因此他在整个 speing 家族中具有举足轻重的地位。第二个要介绍的是这一个技术叫做 speing boots。 前面给大家说过, speing 能够简化开发,是 使用 spa 的技术,可以在简化开发的基础上加速开发。它是用来提高开发速度的,它会让我们原先的 spa 开发变得更加的简单,书写更少的东西。 所以说 speng 的技术问世以后,快速的进行了推广,所有的开发者都爱不释手。第三个要介绍的是这一门技术叫做 speng cloud, 也就是咱们前面所说的分布式开发相关的技术了。那么这三个技术基本上就能够应对我们企业级开发的所有的主流开发工作了。 那么当然你也可以再使用其他的技术,比如说像 spenget 啊, speing、 session 等等一系列的技术,来丰富你开发过程中 所使用到的解决方案。好,有关 spring 家族,我们就介绍到这里。那对于咱们这门课来说,我们学习的是 spring framework 这个框架,解决了我们开发中的大问题。那它又是怎么来的呢? 其实对于现在的 it 技术来说,已经很难凭空呈现出一个全新的技术了, spamerge 也不例外,它是由另外一个思想演进出来的。什么思想呢?在九七年由 ibm 提出来了一个 ejb 思想, 而这套思想引领了当时的加挖 e 开发。在使用者中有这么一哥们,这是谁? spring 思想的提出者, spring 技术的创始人,柔的 jason。 他呢?就写了一本书,论证了加完一企业开发应该使用 ejb, 怎么做怎么做怎么做。随着柔的 jason 的使用,他发现其实还有更高效的办法。 两千零四年又写了一本书叫做加挖 e development without ego b, 告诉开发者做加挖 ee 的开发可以不用 e 接 b, 那用什么呢? 他在书中阐述了一套全新的思想,并且在同年将这套思想进行了一个落地。于是在两千零四年,死病一点零就问世了。 那么经过了若干年的迭代升级,现在 spaping 已经到达了五的版本。对于这些版本来说,给大家介绍几个核心 信息。那么 spere 一点零,它是使用纯配置的形式开发的。在二系列,为了加速开发引入了注解的功能。到了三系列,它已经演化成了可以不写配置的开发模式, 这样可以大幅度的提升开发效率。这就告诉我们一点,我们后面要学注解的开发, 但是注解只是对配置格式的一个变形,他就像一个语法堂一样,给了我们很多好处,但是底层原理还是配置的这种形式。 所以说配置我们要学注解,我们要学学配置有助于我们理解,学注解有助于我们提高开发效率。在四点零 的版本中呢, speing 紧跟 jdk 的版本升级,对个别 api 进行了调整,所以说四和三的 api 有些许的变化。到了 speing 五的时候, spring 框架全面支持 jdk。 八告诉我们一个信息,你要想做 spring 开发,那么你的 jdk 的版本至少是八以上。 到这里呢,我们就知道了 spa 经过了一个什么样的氧化过程。最后我们把这一节讲过内容快速的梳理一下。在这一节中给大家讲了两个信息。首先,什么是 spa 家族? 他是一大套技术级,你可以说 spen 全家桶中包含了很多技术。而我们这门课要学习的是 spenfreemark, 隶属于 spring 家族。以后我们就管我们现在要学的这门课叫做 spaping 了。第二,我们介绍了整个 spaing 的发展过程, 他是由一种思想逐步演化过来的,目前已经发展到了五的版本。有关 spring 技术的发展历程,我们就说到这里。

好,那我们继续啊,刚才呢,我们把这个 b factory 快速门然后给大家说完呢,是吧,通过 be factory 呢,我们可以验证的 ioc 啊,也验证了,然后 di 是吧。下面我们看一下这个我们的 kittencom text 啊,他这个快速门,那这个东西呢,以后要比我们的 b factory 更加常用一些 啊,因为他叫死不运的一个容器啊,刚才这个 be factory 呢,我一直然后偶尔也讲容器是吧,但是呢,他其实本身是个兵工厂。好,那下面我们就看一下这个 我们给 k 成 com tex 啊,我们读一下这段话啊,说这个我们 k k 成 com tex 呢,称为死不容容器啊,称为死不容容器内部封装路并 factory 啊,然后比 befatch 的功能呢更加强大。使用 amak kittencomtax 进行开发时,我们的插苗配置文件的名称 习惯叫做啊 akincom text 插苗。那最后一句话其实无所谓,因为我们刚才在用 bie fix 进行快租门时就给大家说过,你这个配置文件名字叫什么都无所谓,是吧,哎,只不过我们使用这个呢啊,使用它呢,然后我们这个, 呃,约定俗成的习惯就叫这个 um kenjin 康泰有个差苗,哎,这都是小事是吧,那我着重说一下啊,就这个,然后是后期我们才常用的 啊,他是比较核心的啊。呃,人这话是不也说了吗?啊,给 k 神 comtix 内部封装了,别发了锤,那下面呢,我就用这个啊, 我们给 k 生康泰这用这个啊,给 k 生康康 tex, 然后给大家然后做一个入门性的东一入门性的动作啊,他其实相对啊,就比较简单的啊。那 ok, 那我们切到我们来第二快速写一个 啊这个配置呢当然我这是已经都是配了是吧。 service 这个 deo 啊这个我就不再重新去配呢主要是我们的客户端代码我在这再重新写一个。嗯太子的右键我在创建一个叫 我们可以看 text test 吧。好在这个内部我写一个 把 make stay water 的慢吧慢方法他去怎么搞呢。首先啊 make kittencom tax 他是个接口 啊,他这个接口可以点开看一下是给您的位子吧,然后啃。嗯我们的啃桌加一次我们看一下他继承体系是吧。他往下走往下走啊这些是接口,子接就是子接口抽象力然后再往下走 下走下走。哎我们看一下他有一个这个 哎。这个这个是不是可不是个抽象的吧对吧。叫 s pass xiamel 保证给 k 正 candlex。 那其实你读名字知道前面这一块啊读这一块啊什么啊。那家长路径的一个差苗是吧。嗯嗯,给 kitty 卡太子点进去。他本身是直接可以用的啊,所以说我们用接口的方式然后去用他的,用他的子类用他 是吧。呃我们在牛叉的时候呢当然找个包啊找个包我们在牛叉的时候我们就可以直接把那个 a 加挡路径下的那个配置文件告诉他。那我这个要 base 叫插苗是不是直接就在我这 resus 在下面呢是吧。哎这就是我们的 a 加档路径。所以说你在这地方 直接就写个 beans 检查苗,比如说你不要叫那个名字吧叫。嗯给写成康太子检查苗吗?就是 我们是建议对不对?你不叫你说我就用这个 beast 写差名,最终能不能实现?哎,也能实现,我们先不改呢,先不改好,我通过他这就完事呢,这一句话就 ok 呢,是吧,然后呢? get b 获取谁呢?比如说获取优字 siris, 行吧,然后这个地方,哎,我转一下吧, 强转一下是吧,然后把这优越斯位置呢?我打印一下,好,我执行。 哎,稍等。 some has changed 啊,是 哦,我迪吧刚才没跑完啊,把迪吧然后关掉,好再重新跑一遍啊, 哎,你看是不是我看见呢,哎,注入完成了,最终我这个 siri 是不是能打印,人家发现这个就比刚才那个代码要方便很多, 是吧,哎,既然客户端代码又方便,然后他底层功能又强大,所以后期开发用谁,我是不是得用他啊? ok, 我们得用他,当然这个名字呢,还是说啊,这个配置人家的名字你可以改一下啊,比如在这我再写一个吧, 右键,你可把他 copy 一份吗? copy contacts, 这插苗是吧,一样的配人家。好,我在扣断代码, 哪呢啊,在这呢,哎,我把它改一下, 俺在执行,这个也是没有问题的啊。 好,那下面呢,我们再对这个这个 ok, kitchencom texa 对他,然后详细介绍一下,那对于他的一个入门操作,到这我们就结束了啊。

好,那我们继续啊,到这呢,我们把 spring 配置非自定义并也讲完了,那我们下面看下一个关于并的时尚开发基本流程啊,从这开始呢,我们就进入这个 spring 并的一些底层的学习呢 啊,这原理性啊,底层性啊啊,原码的然后学习,所以大家然后注意听这块也是你跟别人然后在 spring 这块差距的地方啊,拉开差距的地方。好,那下面我们看一下,说这个病呢,然后时常开发基本流程,那这什么意思呢?其实简单的讲, 主要给大家讲的是什么呢?就是说,呃,回到我们这个代码区啊,就是说你在这个地方是配了一个并对吧?这个并后期是不是要变成一个对象,存储到死病容器当中? case 吧。那这个过程是怎样的?哎,我们主要是讲这个过程啊,就是从标签配置 到最终进入到容器当中,你在 getaway 时能从容器箱拿到这个并中间这个过程啊是怎样的?我们需要给大家讲一下。好,回到我们的 pp 箱。这我写一段画啊,这段画呢,我们简单去读一下啊, 说此么容易,在初始化时会将插苗配置的并标签的信息封装成一个并地方念是对象啊,这什么意思啊?我们知道扎不是面相对象的对吧?然后你在你的插苗当中会配置很多这个并标签,对吧?我们看看简单的吧,把这个然后注掉啊, 我们看下之前我们配置的这个,我们拿到上面啊,就是一个 do 啊,一个 series 是吧?哎,你配置很多病标签,那这个病标签的信息他想最终能这个参与运算是吧?他是不是得放到一个对象当中,又扎 面向对象的嘛,对吧?所以说这些信息要干嘛呢?要被封装成一个对象 啊?封装,这并不是说这个 u 字 do 对象本身啊,他是封装这个并信息的那个对象,因为这个信息本身也需要进行存储吗?在内存当中,是吧?所以我以这个对象的方式封装这个并的信息,这,这能明白吧?我说过不是这个,并不是这个 u 字 do mpl 这个对象本身 啊,是封装然后这个并标签信息的这个对象。哎,那这个对象叫什么呢?这个对象其实就叫并 definition, 我们把翻译成中网叫并定义对象 啊,就是定义并的啊,封装并标签信息的这个对象,我们把叫做并定义对象,你知道,然后在这个地方是不是存在很多并标签啊?那就意味着每一个并标签是不是对应一个 been definition 就并定义对象,那这不很多并并定义对象吗?那每一个并定义对象啊,又被存储到一个叫并 definition map 的 map 集合当中, 这能明白吧?啊?就是一个病,标签儿就用一个 indiffination 对象封装它的基本信息,而很多并 definition 对象最终存储到一个 map 当中,这个 map 叫什么呀?叫 indiffination map, ok 吧?那么这个 indiffection 的 map 在哪维护?其实就是在我们的 bifactory 当中进行维护啊。 bifactory 当中进行维护。好,接着再看。那你放到麦当劳干嘛呢?哎, sbring 这个框架呀,汇聚这个 map, 然后进行循环, 取出每一个 indiffination 这个对象,拿到 indification 内部封装的信息,对吧?哎,主要 拿谁啊?其实对于我们而言,我们现在稍微,然后更容易理解,就是拿这个权限的名,对不对?为什么要拿他呢?因为拿到他之后,我要通过反射去创建对象, 对吧?哎,所以说在这,哎,我们 spring 框架要对这个 map 进行什么呀?进行循环,然后取出它内部的这个封装的这个并 dividation 内部封装的并的信息,然后使用反射去创建对象。 那每创建好的一个对象是不一个 object 的吧?那这个对象又是存到哪的?又是存到一个名为 叫 singleton object 撕的一个 map 集合当中,这个我们发现成中文叫什么叫当立时,哎,之前其实我们在讲个事,是不也遇到过,是吧?那这个当立时,这个,这个就像就是他这个卖部啊,他在哪维护着呢?也是在我们的 bifactory 当中去维护着这 map 的一个引用, ok 吧?哎,到这为止我们就知道呢,你这个标签,首先我要提取这个标签对应的信息封装成一个 being definition, 然后所有的 definite definition 存到一个 map 当中,是吧?然后再对这个 map 呢进行循环,然后取出每个 be indefinite 的信息, 然后通过他的信息去反射创建,然后变对象,再把然后创建好的对象放到一个当地池当中 啊,这当地时也是个卖法,是吧?哎,这些都在我们的这个 befatry 当中维护着,那相当我这个币是不创建好的吧。当你去调用 get 并的时候, 那其实是干嘛?是不就是根据那个名字,因为 map 嘛, map 本身是不是建筑队啊?就根据那个 key 的名字,然后从你的 map 当中去干什么?匹配对应的并,然后匹配成功之后 就你返回,那匹配不成功呢?就报一错吗?就没有可用的名字,就找不到,对不对?哎,其实说白呢,就是这么一个过程啊,这么一个过程,那这个过程呢?呃,我们可以看一下是吧?我们可以看一下。那怎么看呢? 稍等啊,在这个地方我打一断点,哎,打断点我不搞这么复杂呢,这些我都把它删掉。啊,这都不要了啊。不搞这么复杂,我就找一个 user service 就完, 对吧?找 user service serious 强转成 user service, ok 吧。在这儿打一个断点打一个断点啊,让我们再看。再看什么呢?再看在我的配置当中,我把其 加的啊,把这个,这是 south 也注掉啊。在现在整个文件当中是不就剩一个 user service 跟 user d o 吧。好,现在我第八个去运行它,走 好我们下一步。那下一步之后我这个配置文件是不是加载完毕的嘛? sporting 这个容器是不是创建完毕的嘛?创建完毕之后我点开它,它内部维护一个属性,是不就别 factory? 我们之前是别看过点进去,我们之前经常看谁呢?我们经常是不看。这个叫 singleton objects, 是不是?看它 是吧 power, 它之外,你看它内部还维护了一个,叫什么呀?叫 bin d n d 是 map, 首先你看它是不是叫 carry 的哈西, map 是个 map 吧,然后你点进去,点进去你发现它是不是有个 user service 跟 user d o 对吧?我还是说啊,这个 user service 跟这个 user d o, 它是那个 user d o 跟 user servic 对象本身吗? 不是,你再点开看它对应的是什么?你看这个 user service 对应的这个值是什么值?并不是 user service 对象本身,它对应的是 generic bean definition, 就是它是个 bean definition, 明白吧?它封装是一个并标签的信息,而我这个 urdo 呢?究竟是不是也是一个 indiffnation? 哎,风筝也是那些变的信息,能明白吧?所以它内部存的不是对象, 那对象在哪存着呢?在 singleton optics 存着。所以说这个 indiffection map 是先有的,就把它细细收集到这,然后呢,再对它进行循环,再去创建对象,把每个创建好的对象再存置到 go to object 当中,你发现这个 single time object 是不是存在很多对象吧?哎,我们找我们认识的是不是 user service, 你发现他是不是就说对象本身呐?因为这是创造好的对象嘛,对不对?哎, user d o 是不是也是对象本身? 能明白不? ok 吧?哎,所以说我们要知道,在这个地方,这个 b factory 内部维护了一个,哎, single 团 object 也维护了一个,叫什么 been differentiate 是 map, 那这个 been different 是 map, 然后维护的哪些信息呢?比如说我们看这个 you are service 啊, 它是不是一个 bndp 的卖法,是吧?它维护哪些信息啊?点进去你发现有这么多信息啊,太多是吧,其中有一个 我们很熟悉,是吧?就是它叫 being class, 这什么意思啊?是不是当前 user service 的权限定名啊?这能明白吧? ok 啊。 其实讲到这呢,我们就大概清楚这个过程了,回到我们的 pp 当中啊,我们下一页,我们再看下什么呢?再看一下这个标签对应的这个 indifficient map, 它内部到底维护哪些信息?刚才我们通过打断点其实已经看到了它内部是维护这么多信息,是吧?哎,我们去看一下这个 indifficient map 到底内部维护着哪些? 细细好,我们看着啊,我们结合什么?结合这个并标签去看,我们知道并标签内部是不很多属性, 全线的名,别名 a z e t 是否延迟加载 scope 作用范围引进白色出入化方法 disri 消费方法 factory bin 啊,这,这个对, factory bin 是吧?哎, factory method 这个这个这个,这个工厂方法是不?工厂币是谁是吧? okay a parent 他爹是谁?等等等等,还有什么呢? her properties, 这什么意思啊?就是代表当前这个并有哪些属性,对不对?好,那下边我们就看一下 shift shift 啊,我们就搜一下叫宾 definition, 这边 demination 就它 对吧?它这个接口,那说明下边是不是很多实线对不对? ok, 你往下走啊,啊,首先我定义你是 singleton 的还是 protop 的是吧?给个常亮啊? ok, 往下走, 呃嘶呃,这个,这个还不太好看呢,是吧?我就看,我看 ppt 吧,看 ppt 吧, ok, 它有什么呢?咱看一下这是什么? 是不?当前我这个啊,并的那个权限的名,并的作用范围,并是否延迟加载并的,然后这个 这个,这个 factory bin 是谁,是吧?这个 bin 的这个 factory method 是谁,是吧?这个 unit method 是谁?等等,你看是不是都有设置方法,是不都 set 方法啊? ok, 只归这个,当然你通过这个 还说我那个 debug 模式你也能把它看到?你看啊,比如说我现在看的是谁呢?我现在看的是不是这个 youtube service 是吧,它就很值是不? youtube service 是 gap, 没指定没指定吧, 你说没指定不? single 他们不是单的吗?是现在他这个 indignation 啊,他封装是你原生的这个并标签,你并标签在这,是不是就没指定 service? 没指定他这就空的就没有值,对吧?他在解析时才发现,你要没有值没有值,我就选用默认的就 single, 他明白吧。啊?是不是 biz 已腻?他 force 不延迟吗?是吧? ok, 还有什么呢?认识的找你认识的啊。嗯,我们找这么一个认识的吧,你找到那个叫往下走,他有一个叫 prop。 哪呢? properties? properties 还没找着呢啊,这呢,你看是不是有个叫 property values 是吧? property values 你点开, 现在有吗?那空的没有。为什么没有啊?因为我在配置的时候我这个 service 没没有注 do 对不对?那这样啊,我按那种方式把它注进去, properties 又在 d o r e f 又在 d o。 行吧,那现在你再去执行,好,断点又跑这是吧。好,下一步。好,我们再去看。 找到 be factory, 找到内部的 been definition map 是吧?点进去找到我们的 user service 啊,再点进去 讲这个值是吧?他这个 indiffnation 你再找啊,刚才我们叫 proptis。 哎呦,这个字太小,眼看着可费劲。嗯,在这呢是吧?刚才是没有,因为刚才我标签是没配置。那猪肉,现在你发现是不?赛子是不是有值的吧?刚才这个就是零,没有值,现在是不是有一折, 你看是谁,看是谁,是不是 you 的理由啊,所以你会发现你在这个 indefinite 是 map, 它是干嘛的呢?它主要就是对你当前配置的这个并 信息进行封装的, ok 吧? ok 啊,行吧。这是关于我们这个这个这个这个这个这个就是说这个 individation 在这儿啊, being definition 到底是什么?我就给大家讲明白了,后边再讲。讲什么呢?后边就是再讲 他是不怎么把这戏拿出去呢,是吧?是不怎么封装的对象啊?是这意思吧? ok 啊。

好,那我们继续啊,呃,刚才呢,基于插苗方式的配置 op 啊,我们就学完了,下面呢,我们看一下基于注解方式配置 op 啊,其实还是那句话啊,注解方式配置某个东西,无非就是把原有的标签换成注解,哎,就完事了是吧 啊?至于刚才我们学习插苗方式配置 op 的时候呢,像 aop 对应那些底层啊,呃的实线,还有就是对应的像切点表达式配置啊,在这地方我们就我们就不用再去学习了啊,我们只要看一下注解方式怎么去替代原有的标签就可以了。那在注解方式配置 op 的地方,同样我们学三个点啊,第一个点, 我们看一下注解方式啊,配置 aop 的一个基本使用啊。第二呢,我们看一下注解方式配置 aop 的一个啊,详解啊,一些细节点给大家说一下啊。最后呢,我们看一下注解方式配置 aop 它的一个原理解析 啊,就看注解方式它的入口在哪,最终是否跟我们插苗方式一样啊,也是像用类似的方式,最终然后去生成我们的 proceed 啊。 ok, 那下面看第一个啊,关于注解方式 aop 的一个基本使用, 那首先咱们看下边,然后这段就是说这个插苗配置代码是吧,那我们在配置 op 顶上,首先我们配置三部分,第一部分我们要配置目标 啊,当然这个 ppt 上我写的是 target, 我们当时在操作的时候,我们写的是 user service m p l 对不对? ok, 那第二部分呢,配置的就是我们的通知啊,就是 my advice 啊, ok, 第三部分呢,其实我们配置的是支入 啊,配置支入吧,而这个支入主要配什么呀?主要是配我们这个通知跟我们那个切点的一个融合关系,对不对? ok, 那把这把这三部分呢,我们全部用注解去 实现它。首先第一部分,哎,哎,这个都好说,第一部分,第二部分都好说,这个我们是不是用 iconpoint 呢?最终就能把它放到 sept 容器,就不用插苗去配置呢,对吧?那第三部分呢?哎,我们就需要学习。呃,这个一个新的知识点呢,就注解方式,怎么去配置,哎,我们的千年表达式 啊,怎么去撇配置我们的切面。那首先呢,我们先把第一个,第二个先放到容器当中, ok, 那现在回到代码区啊。 呃,找到我们的 siris。 这样啊,先先我先这样啊,就是这个一啊,我现在不是有配置文件一个二吗?这个一个二啊,我就剩着,我也,我也不去管他。然后呢,我在这,我把这个代码把它给注掉。 助教,行吧。哎,这个助教之后呢,我重新一会再写一段, 那么再写一段啊,这个先放这啊,我一会再在这写,重新写个客户端啊,那说明啊,第一个,第二个,这个配置文件我们都不用的啊。好,那我们找到我们的 series。 呃, service 东西有些多,是吧?行吧,都放着吧,然后在这个地方我加个 component, 是吧?因为它是一个 service 嘛,所以说我可以不加 component 的,我加个 service, 对吧?哎,给它起个名字叫 user service, 好吧,然后呢,再找到我们的这个 advice, 比如 advice, my advice 就找它吧,然后在它上面加个什么东西呢?啊?加个 component, 行吧,因为它并不属于某一层啊,也不属于外部层,也不属于业务层,也不属于 gel 层,所以加个 component, 对吧? 但你愿加名字加不加?算了,这地方我就不加名字,可以吧。然后现在回到 ppt, 相当第一步,第二步拍完的吧,那第三步怎么去搞呢? 好,第三步这么搞其实比较简单,首先啊,我们在支入的时候呢,我在这个,这个,这个 my advice 就是这个通知上,在这个上我先加一个 aspect, 哎,加这么一个注解,这个表明我现在他什么,他可以在他内部去配切面, 明白吧?他加完之后不行啊,你是不是还得配置什么前通前置通知,后置通知啊,是这意思吧,你是不是前置通知?后置通知指定完之后是不是还还得配前进表达式, 是吧?那回到我们的这个 ppt, 就就就这么去搞,你看啊,这地方,比如配个 around, 是不是要指定一个 messer 的是 around, 然后是不是还得指定切音表达式? 试一次吧。 ok, 我们可以这么干啊。稍等,我找到鱼要插插苗配置文件,我把这个代码 copy 一下, copy 一下,回到这,我把注释放这,是吧,那这个千言表达,是呢,我这样啊,我用这种方式, sorry sorry sorry, 哎,这儿把它呢整个 copy 一下, 我放到我这 princat 等于 ok, 这能看懂吧?把它关掉啊。那我问大家,这时候配的比负 mercer 是比方,我的 yes 指应的是他,那切进表达式呢?我直接在这写呢,是这么搞的,是吧?那当前我在这个方法上看着啊,我在这个方法上,我 就在这个方法上加注解。加什么?先别管是吧?我问大家,我在这个上如果加个注解的话,那是不是已经 这个就不用写了吧,就已经表明是在这个 be for old y s 就指定这个 be for old y s 这个方法呢,是吧?那指定它干嘛呢?指定它是不是一个前置通知是吧?所以我就艾特,艾特干什么?我找一下 比负,你看有没有比负,哎,有一个是不 at 比负吧,你看它对应的包是不 o r g aspect g 点 gong 点 annotation 啊,就是它,对吧?你看啊,现在这个因素有呢,这个因素有呢,是不还得指定到底是千金表达是谁? 这次吧,所以我点到笔符当中看一下,哎,他有个 value 是吧?哎,那我,我干嘛呢?而这个 argument, 但是 names 是个 defer 的啊,所以说我在这地方可以直接这么写, 没报错吧?你看啊,上面这个原有插苗配置的这三因素,第一个,前任通知,第二个,前任通知的这个方法是谁?第三个,前任表达式是谁?是不是现在都体现在什么这个注解当中呢? 第一个, at bin i at 比负就体现的是个前任同志,其次呢,要指定谁是牵制同志,前置同志,那方法名我这个注解是不是直接就配到方法上的吧?第三个,前进表达式,我是在框内,是不是以参数的方式,是不是也给他呢?好,那这就配完呢? 这,这简单吗?但是配完之后啊,我们还需要干一件事,因为我们知道啊,就根据之前我们学的这个 l c 基础容器那部分的知识点,你加完这 注解之后啊, spring 是不是要对它进行解析?是,我们需要得告诉 spring, 哎,你得帮我去解析这些注解。 那我们说到实质呢,其实就是你需要加一些额外的标签或额外的一些注解,告诉 spring, 其实就是让 spring 干什么啊?向 spring 的容器当中注入一个能解析 its pack 的跟笔缝像这种注解的对应的一个功能类 啊,一般情况下是什么呀?一般情况下就是并 post process, 对吧?那我怎么告诉他呢?哎,我们需要干这么一件事,在我们的配置文件,配置文件再搞一个啊 copy, 我叫三 好,把内部这些东西我都去掉,去掉在这个地方呢,我加个 注视啊,说什么呢?说你要开启啊,你要使用注解注解去配置我们的 a o p, 你需要开启一个 a o p 的,哎哎哎, a o p 的自动这样给的功能啊,怎么开启呢?其实就是使用 a o p 这个标签儿,它有一个叫哎,这个 aspect g otwo proxy, 配它就行。 哎,你就配这么个标签就 ok 了,你要不配 ok, 那最终你写的那东西就不行,不成功。你比如说啊,在这测试代码,我把这代码 copy 一下, copy 放在这儿,我现在加载谁,是不是加载 altication 三,当然这三当中什么都配,什么都没配,对不对 啊,他是空的啊,空的,那现在我就看我现在不加载,然后这个标签就不加载。这个标签我只使用刚才我写的这个注解,是吧? aspect 啊 b for 啊,他就是能不能帮我达成这个前任通知这功能。 好吧,那比如说在这我就测试呢,现在获取的是个 service 调,呃,这个 service 的收二方法我执行。 哎,我就怕报错是吧?哎呀,报什么错呢?说 combat, 你把 service use a service 这个 vanable, 没有这个类型 啊。没有这类型啥意思啊?我犯什么错呢?同志们,我犯啥错呢?哎,我我光,我光说这个没这个,然后弄完之后我是不是需要加一个, 是不是加这条加不加是不生效,我把啥给忘了哈,我这不是配这个的吗?这是不是生效?是不是也得加东西?加,是不是那个包扫描组建扫描吧,所以扫描都没加啊。这个有点过分了啊,好在这啊,关掉啊,组建扫描。 哎,这是什么子件扫描组件啊?组件扫描用谁啊? context 是吧。 context coming skin come 点 it 黑马。行,就这样吧。好吧,那我们再执行,再执行。 好,你发现这个 service 是不能获取到,并且是不能调用收二方法,但是最终前置通知有没有执行?这前置通知你 开始这东西,这你的代码有没有执行?我把这个去掉啊。打那句话就完事,是没执行,没执行说明这个注解有没有生效?没有生效, 那为什么要生效?就因为死病本身他不会主动去解析 aspect 的 before, 你得告诉他,让他去解析。你怎么告诉死病让他去解析啊?其实说白就是把这个打开就行,你把这个打开死病,然后再解析这个插门文件的时候,哎,解析到这发现,哦, 你使用注解方式去配置我们的 a o a o p 的,那他又主动的向 spa 容器当中什么呀?提供对应解析注解的那个功能类, 那这个死人就会去干什么?去解析对应这个这些注解,找这些注解啊,你不告诉他他不会找。好,现在我们再去执行。看,我把这打开呢啊,把这个视频已经打开了吧,打开之后我们再执行, 你看前任通知有没有执行,是不是已经执行了吧。 好吧,这是关于我们注解方式去配置 a o p 的快速门,其实相对而言比较简单。新的知识点只有什么?新的知识点只有在你的这个通知上加一个 aspect 上 啊,这些扛不难的。这都不是新的知识点啊,你要想把它放到 siber 容器,你本身是不是要再扛不难呢?是吧,在上面加什么呀? aspect, 并且在你对应的那个方法上加什么?加注解 指定他到底是什么通知,并且对哪些切点。哎,起作用。好,这是快速门部分啊。

好,那测试环境答完之后呢?下面我们就要控制事物了,对吧?根据刚才我们的测试,我们要在哪个地方控制事物啊?要在我们的业务层,对吧?哎,找到我们的 service, 呃, siri 跑哪去了?这呢? 是吧?对,这个方法要进行事物控制,这个方法内部的操作都需要统一在一个事物当中,而现在呢,默认情况下是 map 啊,操作一个方法,它自己是一个事物,而下这个 map 呢?它又自己是一个事物,那这是不允许的,我需要让它减钱,跟加钱的动作 同时成功,要不就同时失败。好,那控制事物,一般情况下我编程是怎么去控制?哎?我是不是要在这个地方干嘛?开启事物是不是?然后对这个两个方法是不是踹 cat 一下吧,啊?串一下对不对?那串之后呢?如果他被开始呢?我就让这个事物回滚,是吧?那如果然后最终都执行完毕,没有开始就没有抓住,没有异常爆,那最终是让提交,哎,大概这个意思啊。 好,那下边我怎么去操作呢?我们通过然后这个声明式事物控制,让 spring 帮我去控制这个方法的事物啊,其实说白就是什么呀?就是我告诉 spring, 哎, spring 啊,你把帮我把这个方法去加什么?去加个事物控制, 明白吧?哎,那事务怎么去控制?其实就刚才说的那样,哎,先开个事务,然后呢?当你然后最终代码都执行完毕,没有问题,我再提交事务,那这样他不就保证这两个方法在同一个事务当中的吗? ok 吧。 好,那下面我们分析一下啊,刚才这个事物控制本身它就是一个增强,对吧?它什么增强?事物增强哎,我们用 a o p 的思想就可以去解决它,大家想想 a o p 的思想怎么去解决呢? 啊?回到这啊,首先说我们的目标切点是谁?就目标方法切点是谁?切点是不就是我这个当前这个 service 当中这个 transfer money 这个方法,它是我们的切点吧,对吧?而我们的这个通知是谁 通知啊?就是增强方法是谁?增强方法是不是事物增强,而这个事物增强我们用声明式事物控制,不用我们去写死,不是帮我提供,好吧, ok, 这意思吧?哎,所以说我们就回到 pp 去分享啊,目标是谁呢?目标是不就是我那个啊? count service, 而他内部的方法是不是就我们的缺点,对吧?而通知呢?通知内部是不是有事物增强的方法 是意思吧? ok, 那在这个通知一般情况下,之前我们在写 l p 的时候,通知像 my advice 是不是都自己写,而现在这个通知受增强是不? spring 已经提供好的,对不对?那 spring 提供好直接去配置, 配置那个 aop 那个切面是不是就行,对吧? ok, 但是呢,你要使用人家这个哎,已经帮你封装好的这个通知,你是不是得找事务相关的包吧? case 吧。所以说我们分析哎,三点如下,第一点,我们需要导入死病事故相关坐标,为什么呀? 因为死病帮我进行事物控制的代码啊,其实说白就是那个通知事物增强是不就在那个 哎,那个 supreme 提供的事务相关的包当中,是吧? ok, 所以我要导相应坐标啊,那导哪个坐标呢?其实这个坐标我们现在目前什么都不用导啊,因为我们之前已经导入过一个。稍等啊,我们看一下,我们已经导入过一个叫 t 呃, g g b c 的包儿,哎,倒没倒啊,这儿呢? spring 杠 g g b c 是不是找这个坐标了吗?这个坐标下边儿要维护着一个这个叫 spring 杠 t x, 这个 t x 就是喘 section 这个缩写啊,传三个缩写,他就表示事物的意思,所以说你要进行这个呃,这个事物控制开发,你只要找 g g b c 包啊,就有,这就有这个 t s 这个事物的包呢。其实死命这么设计也没 没问题,因为你只要跟数据库操作,本身是不是就设计事务对不对?哎,他得给你掩盖进去呢。好,那这第一步倒包不就完事了啊?那第二步呢?我们就设计配置的吗?我们是不是得配置我们的目标对象是不是就配置我们的 coms servicem, 把它放到 speed 中气当中 是吧?光配完它下一步呢?哎,我就得配置什么呀?配置 a o p 相关的一部分呢?比如说我要配千层表达式 是吧?哎,还要配什么呢?还要配这个通知是吧?还要配这个对应的这个切面啊,就是支入嘛,就配我们这个切点,表达出切点跟我们最终这个,哎, advice 通知的那个集成关系,支入关系 是吧?而这个地方用什么配呢?这个地方我们用 advisor 配,哎,我们不用 aspect 配,因为之前我们学过 advice 提供一嘴,对不对?因为当前这个 spring 提供的这个数增强啊,数增强他已经提供好呢 啊,并且呢,哎,他是用这种 advisor 方式让我们进行配置的,哎,我们就用这种方式进行配置,那这个配置完之后我们还用去指定你这个事故增强到底是前置通知啊,后置通知啊,还是环绕通知吗?不用的,因为当时我们学过这个 advisor 配置的切面, 它内部到底是哪种通知的类型?它那个已经固定好了啊,对吧?用 advice 就配置这个,这个,呃,这个通知它是以时间接口的方式帮你去确定通知的类型的,所以我们只管配,并不管它到底是哪种通知。 这个之前我们在讲 a o p 那个是那个地方,是吧?给大家讲过。好,那下面呢,我们就配一下会到这啊。 呃。我们找到什么?找到,呃。配置文件,找到配置文件,这是吧?按照步骤首先配什么呢?配我们的这个。呃,这个目标对象 啊。目标对象其实我已经配完了,是吧?我用是不是这个注解方式配的吧? service, 他就是我,他就是我的这个目标对象,他已经进入到 sept 容器了吧。 ok, 那拍完他之后配什么呢? 哎,就配对应的我这个 a o p a o p 的事物增强,这么写的就是事物增强的 a o p, 对吧?原怎么配?现在还怎么配?原怎么配的?是不是一个 a o p config 吧,是吧?内部配什么呢?首先我是不是得切个配个切点 配千音表达式,哎,在这 a o p prank art 行吧。然后呢,这个名字叫 t x point cut 吧,事物相关的一个。呃。这个千年表达式,然后 execution 呃 shir 任意 value 值 come 点 it 黑马点儿。嗯, service 下边的 实现好把这个关掉啊。哎。它下边的任意 a 的任意方法不管你到底有没有参数,任意参数 是不是配完了好再往后边配谁啊?就是配着我们的支入 注入关系, 稍等关系啊是吧。那怎么配啊? 是 a o p 什么?我们现在告诉他是不是用 advisor 吧, adviser 内部配个 adviser r e f 还要配个什么 percut r e f 我现在是不是也用这个 t x 是现在配到这个程度配到这我告诉大家没有新知识点是不都之前 o p 学过的吧。好,那这个 advise r e f 还是说谁提供说一下啊。这个通知 通知啊,引用什么呢?引用 sport 提供好的 是吧?就是呃的 ysif 这个通知啊,去引用 smart 提供好的。那 smart 提供好的那个通知是谁呀?好,那在这我就说一下子啊。 好,我通过这个往上推呢啊我现在是不是需要 advice 所以在这地方我得配置 spring 提供好的那个谁那个 advice。 好吧那 spring 提供好的 advice 是谁呢?或者 spring 提供好的 advice 怎么去配置呢?我们其实脑子当中第一页像我们想是这么配配个并 是不是谁谁谁这个谁谁谁是不是死不是提修好的那东西啊,然后给他加个 id 说本来 id 是不是 id 比如叫 my advice 是吧,然后把这个 mys 是不是引到这就完事了,而这个并是不是提供好的这个事物的这个通知啊,它是什么我只要找到往这这个权限里面一写是不是就完事了嘛。 但是没那么简单啊。为什么简单呢?因为我们知道事物其实还是说他有很多定义信息 定义信息啊, transition definition。 呃,刚才我们说过吗?就是说这个事物本身,每个事物是不都有自己的一些属性信息吧?你比如说超出时间啊, 对吧?各样的级别啊,传播行为啊,是否指读啊?所以说我们不是简单的配个宾就完事了。那 spring 怎么规定的我们去配这个 my advice 呢?哎,它需要用到 spring 提供的又一个命名空间,就是事物这个命名空间对 的标签,然后去配这个 advice, 就这意思。哎,用这个标签去配啊,就是喘 section 这个名名空间提供一个标签,叫 advice 标签,这个 advice 标签专门是配 spring 提供好的这个什么事物增强的一个通知的, 但现在 t x 这名框呢?有没有?没有,所以我们需要导入,哎,回到这儿,把 a o p 的我们 copy 份儿,把它改成 t x, 对吧?这改成 t x 知道吧?下边儿这个再 copy 份儿 是吧?把它写上 checks, a checks。 哎, x 前面这要改成 text 好约束。演完了是吧?演完之后 往下走,在这个地方我们进行配置,你看这不报错了吗?是不说明这个 t s advice 是不是有对不对?它怎么去配呢?看啊,先看一下 t s advice, 就这个通知标签上面给了一个属性,首先它给个 id, 哎,我就叫 t x advice 行不行?你这引是不是就是引谁呢嘛?是不是就引这个 t x rise 没问题吧,但是它还需要配什么呢?啊?听我说啊,它这个地方还有一个属性叫 transaction manager。 哎, transaction manager? 什么叫 transaction manager 呢?翻译成中文叫什么呀?叫事物管理器。回想一下,刚才我们在介绍这个编程式事物控制的时候,就 spring 提供的编程式事物控制,它有一个 特别核心的一个什么呀?累,就叫平台事务管理器,当时我给大家说过不同的,然后这个持久层的框架,他使用的平台事务管理器不一样,因为他底层,然后控制事务的方式不一样,对不对?所以这个地方你得告诉 spray, 你到底使用的是哪一种平台事务管理器, 明白吧?那这个平台输入管理器我是不是又得逆向去干什么呀?再去配置一个平台输入管理器啊, 对不对?因为你要什么得配什么嘛,你把这平台十五个 m c 再给谁?给这个通知?把这通知再给我,这个 voice 是不是就配完了吧?好,那这个平台十五个 m c 怎么去配呢?哎,它就简单的,它其实就是配这个并就行, ok 吧,但 问题在于这个病是谁? ok 吧,我起个名字 id 就叫等会儿啊,这个地儿我叫 tracismender 吧。 好吧,但问题上是谁呢?还记得我们 shift shift 啊, made form transaction manager, 还记这东西吧,对吧?我一开始给大家讲过吧,啊,就是 supreme 提供的一个什么呀?一个平台事务管理器,然后呢?这个不同的底层呢?不同的,然后丢层的一个实现啊,都会去实现这个接口,提供不同的平台事务管理器的实现, ok 吧?那现在我这丢层的什么呀?遇见是不是 my best 吧。好,你选中它。哎,我们看一下它的一个继承体系啊, ctrl 加 h, 哎,你看,都把它打开,都把它打开,我们是不是可以能找它实线接口肯定不找。呃,这个抽象 h 表平是吧?是不是这么多是吧,那么选中哪一个呢?哎,我们选这个 啊, data south transaction manager 啊,就换句话说,我们当前然后使用的是这个 my badits, 对吧?而买白的是底层使用的还是 d g d b c, 所以说我们在选用的时候就是 g d, 就是这叫 south 出来三分之半地址。但是有一点,如果,如果 你现在这个丢层,这个数就是这个数据持持久层,这个框架使用是 harbornit, 那这个地方使用的平台数关批就不是得劲臊子出来三十般地址的啊,就是 harbornitch 出来三十版地址,你就知道 到这个平安事务官提交不同的实现就 ok 了,明白吧?哎,现在我们使用是他啊,他好 copy 他的权限里面啊,他内部需要什么东西呢?他只能操作靠 g g b c, 而 g g b c 操作是靠可南山,所以内部需要注入一个 dare source 啊。说著给 dear source, 所以综合着这些信息回到我们的配置文件当中,我说怎么配呢?就是它 dear source 说三是 manager, 然后它内部呢?需要,哎,去注入一个,这叫 source, 行吧。而我这 darth south 是不已经在荣誉当中?是不是刚才已经准备好了吧?哪呢?是不这呢啊,这呢?好,已经准备好了, ok 吧,那就给他呢,然后 p r 事故关注器呢啊,就给他了,然后再把这个,然后通知呢?是不是就给他了?所以我发现我们这个配置 我们是逆向推着走的,因为这段配置是我们最熟悉的,也就根据我们的,根据我们的推断,是不是就配额的 viser 这个,然后通知的一个增强是 spring 提供的,那这个通知怎么去配?就这么去配是吧?你发现这个配通知通知内部要需要一个平台输入管理器,所以我们又这么去配, ok 吧,配完了吧,还差一点,还差一点。因为刚才说每个事物啊,是不是都有自己的属性,是吧,所以在这地方你得为这个方法啊,可以指定这个方法对应的一些。呃,这个事物的参数是什么?当然当然,在这个地方我们先干什么呀? 嗯,先简单的去配一下,我先这么配,你先别管为什么,因为后边我我会给大家讲解啊星,其实大家知道他代表什么呀?这星星是代表任意是吧? 啊,就任意方式,任意方法,你啥都没配啊,属性都是默认的,就代表任意的方法都使用默认情况下那些事物的属性。 ok, 一会这个地方我再详解。好,就这么配啊,这么配,这么配完之后呢,我们得去做项目测试呢。 好吧,咱们做测试啊。呃,首先呢,在这个地方我 c m d 一下,在这 my circle, 然后进去之后呢, use by basis, 对吧?然后进去之后呢,我们 select the shirt from 呦呦呦,叫哎呦 t b pp 什么呀?那个表叫 conte 吧,是吧?一个四千一,五千五,对不对?好,那下面我们这么干啊,我们把它再更新一下吧。 update account 这个表 set money m o e y 等于五千 开吧。然后呢,我们再去查询现在是不是都是五千吧。哦,都是五千,我现在配上事物之后呢,这事物看能不能生效吧。好吧,那回到我的。 呃,找到这个点,我先把这个,然后这个报错是不关掉对不对?然后找他们测试方法,我先正常去转,看这五千能不能转成功。 哎,没报错吧? 哎,只不过没有日志吗?那首先起就没有报错,其实我这配的基本就能成功啊。 ok, 那让回到我们这个地方,我们再去查一下,四千五,五千五,四千五千五,那个少五百,这多五百没问题吧?好,现在我把这个错误打开,错误打开。 好,错误打开呢?我再执行。那报错是肯定的,摆 zero 的错误嘛? 好,报错,摆 zero 是吧?那现在我想看到什么状态呢?我现在去查询,如果他的这个数据没变,还是四千五到五千五,我们是不是可以?哎,推导出我们现在事物是控制 成功的,就这个 transcessful, 传那个 transfer 那个 money, 这个事务方就业务方法,事务是控制成功的吧。好,我们去执行,你发现 钱变没变?没变,还是四千五,五千五,说明这个事物已经控制成功了。好,那为这个什么呢?我们再去这测一遍。看着啊,我把这个,把这个,把这个是吧?把这个干嘛呢?给他注掉。 助教,是不是事物增强的 aop 是不就关掉了吧?好,关掉之后我再测一遍。再测一遍啊。 首先说肯定会报错,摆字是错误是吧?那现在回到这个税库这个地方我再查询,因为刚才我把事物增强了 aop 关掉呢,对不对?现在他就不会自动帮我去控制这个业务层的事物呢,所以现在我再去查询的话应该是什么状态? 一个少钱,一个没多钱,这个吧,一个变成四千,一个还是五千五,对不对?因为他自己控制失误的吗?好,我们去执行,你看 一个四千,一个五千五,说明事物根本就没有控制住啊。不是没有控制根本没配吗?就没有控制事物还都是要 mapper 默默认的自己的事物 啊,就是卖白底层摸到自己的事物, ok 吧?好,我还把这个然后打开啊。打开,行吧,这就是我们这个 spring, 然后声明式事物控制,就插苗方式的啊,去配置声明事物控制啊,就是这段代码, 有人说,哎,这么复杂呢?看似复杂,看,看似东西多。你在配的时候啊,你别从上往下配,但是你配熟之后从上往下配,先配出来三个 manager, 再配,然后这个十五的 advice, advice, 然后这个通知再去配这个 aop, 是吧?可以,但我在配的时候怎么配的?还是说我先配的,他要什么在逆向去往上去找,再去配去? 好,那这个那插苗方式的声明是不控制的入门啊,我们就到这啊。

好,那下面我们就把这个开发步骤用代码去实现一下对不对?哎,下面我们就去做啊。呃,第一步干嘛?导相关坐标对不对?这地方我们坐标是不是就找这个 stravc 的坐标就可以了吧,其他坐标我们之前已经导过呢啊,找到我们的 pom 插苗, 好,我们就在这了。哎,在这个 siri 的外部下面去找这个 mvc 的坐标。我说一下啊, siri 杠外吧,跟 surping 杠 mvc 他不是一样的啊,上边代表 surme 集成外部的,而下边我这个要导的是 surpringmvc 的坐标啊,底盘的 c siri 杠 m 啊,不是 m 呢? y 吧, mvc 他啊。呃,对的版本版本,这个 扣屁,五点零点五 可以吧。那这个打完之后他内部是不是有谁?是不是有那个前端控制器,那个拍摄 sorry 的对不对?但是我需要配置才能使用,所以说下一步我们找到外部点插苗在上面吧。写注册啊,我去配置 配置。呃, supreme mvc 的一个前端控制器。 前端控制器啊,那这个前端控制器是三对的是吧?那我就配一个侧窝 名字,一会再说,我们先开一个 sorry, 第一次 拍手是不是这个吧,哎,就是他,然后就你的名字呢,我就叫第一次拍手 sorry 可以吧。哎,一般呢,在这个下边,我们在配的时候习惯再配一个 六张 strp。 这还记得吧?外外部记得,是不是学过代表干嘛?代表服务器启动时就去加载我这个四轮配置。创建巨像吗?对吧,你要不配呢?是不是默认第一次房是在创建巨像?那就配个配个一吧。好,再往下走,我要配这映射地址, 四双 kitty 名字记得排斥这呢我就配个盖盖代表缺少的四双给他,那就意味着每次在访时任何请求是不是都要走这个四双给他,那在开发当中呢,可能有的你还会看到这个星点什么什么什么,那你这么配完意味什么呀? 意味着你这个请求的资源扩展名是叉叉叉时是才走这个三成给的,对吧? ok, 在这呢我就配这个缺省的 行吧。哎,这是第二步拍完的第二步前进控制器拍完之后呢,第三步干嘛呀?要编写我们的 ctrl 跟视图对不对?哎,所以在这,哎,我不在这个外层去写了外层之前那个旧版的啊,我再去创建一个 包吧,这个包就叫啃上个包,一般情况下,我们在使用 mvc 时,外层这包我们都叫啃上个包,当然你说我非得叫外层包, 这是一个有所为无所谓的事情,是不是?哎,你叫什么都行。好,在这创业好之后呢,又见我就创建一个,我就叫 u 字成长感,对吧?哎, u 好,创建好,那创建好之后呢,内部是不是就有对应的方法吧,那就写个方法吧,这个方法直,我就写个四追,然后方法的名字你叫啥是不是都行啊,对吧,比如在这我叫 siri c 五,然后那边呢,打一句话啊,这个比如说我就叫 ctrl c 五 reney 然后蕊翠什么的就说啊,这就蕊称呢,是你要跳转的视图。明白,你比如说我在我的外吧 app 下边右键我创建一个 vip 啊,比如说 icucc 一二三,我叫萨克塞斯小 t, 是吧,创建好之后呢?注视标啊,创建好之后我在这个地方 写个 h 一,是不是就写个叫四个赛事啊?写个三个赛事吧。好,那选中呢?在这个地方你要反着神一下,你就要跳着那个四个赛事 gip 的视图,你就在写就行, 是不是比之前生日要简单很多呀?那个生日,然后再写的时候,之前我们要进行一个跳转, 我是不是乳筷子盖子,乳筷子底子拍出来点什么蜂窝的,因为每次写是不是写一长串对不对?好,这就 ok 了,这是第三步,试图跟肯定都穿的好,穿的好之后咱是不是得配啊,对不对?配啥?首先我得把它放到容器当中, 哎,再放到四倍容器当中,然后呢,我在请求时,我请的地址跟我这个方法直接是这个应售 关系,对不对?这个应是关系,在这我们也用注解哎,去替代这个叫瑞筷子买平的,你发现中国人是不是请求买平?是不是?应设?是不是叫请求应设对不对?好,在这,比如说名字,我就叫 cat 吧, stelechar 快速入门对不对?来,写个 call, 那仿 cat 时,他是不是就帮你应试到这个 c? 有方法啊,是不是执行这个对应的逻辑,最终返回一个 stechat, 是不是跳到我这个视图当中,对不对?好,那接着 这第几步啊?这是第四步是吧?那第五步呢?你写完这个东西思平知道吗?那不知道啊,我是不是扫一下对不对?所以说下一步我在我的这个蕊哨子下边右键,我去创建一个 surpringmvc 的配置文件,也就是说你能不能在这 这个这个配置文当中进行一个包扫描啊?组建扫描啊是可以的,但是呢,我们是要分开的, suvic 的很多配置我们都配到 siri 的配置文件当中啊,所以说在 resote 下边右键我再创这个 siri 配置文件, 哎。 surprenk viger 我叫,叫啥?我说的是不是叫 sirimvc, 叫啥名?还是那句话,叫什么是不都行。哎,我们习惯叫这个 ok, 穿好。那穿好之后呢?我进行什么组件扫描?组件扫描就是 ctrl 的组件扫描, 好吧,对吧,但你在扫的时候你要知道啊,你在扫描时,你是不是用上那个康姆丁斯给你那个标签,那个标签是不是属于康泰斯命运空间的?而我的地方是没有康泰斯命运空间 咋办?补一个吗?是吧?之前补过啊,我们再补一个,这地方,这个冒号冒号叫康泰克斯,后面呢?把 b 改成康泰克斯, 行吧,没啥事是吧?我们还需要干嘛?还需要把这个地方也拷贝一下,我们得告诉 他我们这个,呃,康泰克斯的那个 steam 的真实地址吧。哎,往后写靠背写到这,我把这个 bix 改成康泰斯, 康菜克斯,烤皮,后边呢?这几方康菜克斯,这个地方康菜克斯是不就 ok, 是吧?好,下边我们写一下 x 冒号康复那个 siri, 这个就是贝斯派克,是基本猫。而我现在我还说我这个 spa 这个内部的报扫名只扫谁,是不是扫外不层?而在我这个公式当中,我现在的外不层是不是 ctrl gangel 就是 splapc 集中后的外层,是不是 ctrl 跟对不对?所以我就扫这个啊, crm 点 it 黑马九。 比如说你这个什么 siri 整丢层不扫吗?丢层的 siri 即使扫也不属于我这个死不认 mvc 内部的作业扫描, 你要扫 siri 省跟丢省是不是放到 surping 这个啊?给 k 正扛太子插苗,这个文件内部进行逐渐扫描吧。哎,我们这个从业务上是区分开的啊。好,扫完之后呢? 第五步是完成的,但是现在有个问题,你这个文件没被加载啊,你还记得当时这个文件什么时候 加载的吗?我们是不是写个维斯那有没有一下往下走,这地方是不是有个维斯那吧。那这个 a 四那不要找谁,是不是找一个全局的出手法参数是不是配全局出场参数是不是?告诉他配置文件的位置吧。 当你这个 stelemc 的这个配置文件,你是不也得告诉他在哪,是吧?那这个怎么告诉 siri c 这个配置文件呢?我先问大家啊, supreme ac 这个配置文件谁用? 你说你想想谁用啊?那图谁用?是不是这个核心的这个控制器用吧。所以我是被告诉这个控制器我这个配置文件是在哪,所以说,哎,他是在 配置这个 sorry 的十,告诉他配置文件在哪呢?好,我说一下啊。 这个我们之前是不是也学过,这代表是不是斯文贝的一个初始啊?就是初始化的一个参数,对吧?在这写谁呢?跟之前配那个 surpring 的那个那个名称一样啊,叫什么?叫 contuccok。 那这咋写啊?那是 pass。 那加载谁啊?是不是加载 stelemc 的场面吧。 这个才代表第五步全部完成好,做完之后最后一步呢,进行相应的测试,我把这工程启动一下。 好,稍等一下啊, 稍等,有点慢,他自动帮我打开个页面。 好,打开。那我去仿谁啊? 他说回到这个代表当中啊,在 ctrl 当中,我这个地方是不是写个愧干?是,不写愧干,这就是应试地址。好,所以说你在这愧个就行。 好,回车你发现是不是个塞子?这个是个塞子,是不是?我那个损色的加 t 内部是不是带码,而你在空看控制台 ctrl c 五软拧,是不是打这句话, 明白吧?好, surping mvc 快速入门的代码实现就完成了。还是比较简单的啊。

好的,同学们了解了网关的基本作用,这节课我们就来动手搭建一个网关。那网关呢,是一个独立的服务,因此搭建网关要做的第一件事情就是去创建一个全新的 model, 然后做一个独立的服务。 那在这个服务当中啊,他需要引入两个依赖。第一个呢是网关的 statter 依赖,也就是自动装配,那这里边会为我们提供网关的各种各样的功能。 第二个依赖呢,是 nice 的服务发现依赖。因为网关本身也是个微服务啊,他也需要把自己注册的 nice 或者从 nice 上拉去服务,所以必须得有这样一个服务注册发现的依赖。 好,这是第一步要做的事情。那不废话,我们先把这两个动作做一下啊,来,我们打开。第二, 现在呢,我们在这里去新建一个模块啊,在这新建 model, 然后选择 next, 这里我们起名为 get v finish。 好,创建完了以后,我们在这里边去引入依赖。按照刚才 ppt 总所说,我们需要引入两个依赖,第一个呢是 next 服务发现依赖, 当然这个不分先后啊,你先引谁都可以,我们先引服务发现吧。好,我们放大一点啊,这个是我们服务发现的依赖,我们写一下吧。 好,那么第二个表演呢,是网关依赖 spring cloud 干,嗯, get v star。 哎,看到了吗?最后一个 stat gt v 啊,来走走,好,打包。那这样呢,网关的两个依赖我们就引完了。 那当然,我们知道一个服务要想启动,他还需要闷函数吧,所以我们在下面给网关创建一个闷函数啊,我们新建一个类报名,还是 cn 点 it cost 好,那么其中类的名称呢?我们就叫 gateway uplay k 神。好,那么下边我们把它放大在这儿呢,我们第一要加 spring both 的 k 神,第二还需要编写闷函数,然后在这里通过 spring application 点儿一个 run, 通过 ktv app 的 k 神点克拉斯和阿克斯来传餐。那同学们网关的搭建就成功了。好, 那接下来我们要做什么呢?同学们,思考一下。我们的网关功能有很多,包括我们之前聊到过的身份的认证,还有请求的路由,还有请求的限流等等, 而其中最基本的功能就是陆游了,所以呢,我们接下来要做的事情就是在网关里实现一个请求的陆游。那怎么去做这个请求陆游呢?我们回到 ppt 来看一下啊, 好,那么请求陆游是通过配置来实现的,大家来看一下这个配置文件啊,在这配置文件里,我们第一步要配的呢是服务的端口,还有服务的名称,还有 nice 的地址。 同学们,这些配置其实是让我们的网关能够联系上 nicos, 实现服务注册和发现。 那么接下来才是网关的路由配置。网关路由配置呢,叫 get, 为 rose, rose 顾名思义就是路由,那加了 s 代表的就是有多个路由规则,所以这个地方是数组啊,可以配好多,比方说来这样杠, 这就是一个,那大家可以看到这个路由力,我先定义了一个 id, id 是路由的唯一标识,每一个路由规则都应该有自己的 id 啊,确保他唯一啊,不重复啊, 只要不重复,你就可以随便定义啊,比方说我这有点杠。 siris, 这就是我一个 id, 那路由除了 id 以外,还会有第二个配置,叫 uriuri, 是陆游的目标地址。那有两种写法啊,大家可以看到上面这种 被我注视掉的这个 http 什么什么的,这个他呢是像一个具体的 ip 和端口进行陆游, 那也就是把路由地址直接写死,那么将来全都往这个地址去发,这种呢,我们一般不去使用啊。而第二种路由规则呢,是下边这种, l b, you the service, l b 是一个单词的缩写,哪个单词呢? load balance, 那这个单词大家应该认识吧?复载均衡,它就是告诉我们的 ktv 这里,你这个转发的时候啊,你在做漏油的时候,你要做复载均衡啊, 那后面跟上的是个服务名,那因此网关要怎么做呀?是不是应该拿这个服务名去有瑞卡里找到服务列表啊,而后去做复载均衡,实现 请求漏油,是这样一个过程啊,好,那当前这个配置的意思就是 我要把请求陆游到用户服务啊,就这么个意思。那问题来了,我把什么样的请求陆游到 用户服务呢?你得有一个规则吧。所以第三个配置就来了,叫 predicate, predicate, 那么这里又加了个 s, 而且这里 predict 是什么东西? 那大家肯定不认识这个单词,对不对?我们通过有道词典来翻译一下啊, pride 给他呢,我这里查了一下,同学们可以看到他的意思啊,非常的诡异啊,叫谓语,谓语得有点像我们的一种语法的表示,是吧?什么名词动词, 什么喂鱼什么之类的。那如果说呀,大家这样来翻译,你肯定是越整越糊涂, 因为一些英文单词在不同的场合下要有不同的翻译。作为计算机领域,我们应该把翻译成断言, 大家来看啊,专业示意里边啊,计算机科学里边是吧?翻译成叫断言,数学当中也是如此。断言,那断言好像听起来也是有点奇怪,是吧?什么叫断言啊?就是断定的意思,那我们去搜索一下来,我们打开浏览器, 而这里呢,我已经百度百科搜好了一下,大家来看一下断言的意思啊。断言,百度百科的介绍是是一种变成术语,它表示为一些不耳表达式,所以断言是一种不耳表达。 是,那就是判断处或 pos 成立或不成立。好,我们回到 ppt 这个地方的断言,其实也就是一种判断,判断你的请求是否符合,那如果符合, 那我将来就会把你路由到 u 的 suris, 如果你不符合,那不好意思,我就不管你了,那你就看找别的路由去。那比方说下边这一列 杠就是其中一种漏油规则 plus 等于 uzer 杠星星这个漏油规则 pass。 漏油规则代表的含义是什么呢?就是只要你的路径是以 uzer 开头,那么就算你符合规则了, 我就会给你代理到 uzer service 服务区,明白这意思吧?哎,这个就是一套路由规则,里面包含三部分,路由 id、 路由的目标地址和路由的断言。好了,那我们下边就不废话,照这个去试一试呗。我们打开第二, 在这里新建一个 file, apple k 盛典 m, 这里呢,我们要配上服务端口,那么就按 ppt 吧,这写了幺零幺零,对吧?然后是服务名称, 比如说我们就叫 gateway, 二是 nacos 地址, local host, 八八四八。 然后呢,就轮到陆游了,陆游呢,叫 ktv 肉丝, 肉丝这个单词啊,就是陆游啊,好,那有很多很多陆游,对不对?那我们要多个要用杠啊,代表数组嘛,或者集合 路由里要配三个东西,第一是 id 唯一标识,比如说我就叫 uss, 好,这是路由标识, 好,必须唯一啊。而第二个呢,是陆游的目标地址 u r i。 这个地址我们可以写死,具体 ip 也可以写服务名称。那我们建议大家都写服务名称啊,写服务名称时,前面就不是 i g d p 了,而是 l b 代表 load balance。 后边跟上 这个 ip 地址啊,哎,服务名称就可以了,后边跟上服务名称就可以了,比如说 user 四维斯啊,啊,这是陆游的目标地址。 最后呢,我们还要加上一个断言,判断一下这个请求是否符合规则,如果符合规则,那我们就让 让他代理到 u 的 suris 去。所以我们来一个普瑞贝克斯, 其实就是判断请求是否符合规则啊。好,那么断言也可以有很多个,其中我们要写的是一个叫 pass 的断言, 这个断言后边跟上什么呢?你的判断规范,比如说杠 uzer 杠星星。这句话的意思就是啊,这是路径断言啊, 判断路径是否是以杠 user 开头啊,如果是,则符合规则, 那么就会代理到这个 u s 区了。好,漏油,规则就定义完成了。那同学们,我想问问大 大家,如果我现在还想代理一下 oder service, 漏油一道 older service, 我该怎么写?同学们,你们来说,我来写怎么做 id 后边呢? order service 吧,哎,当然,这个可以随便写。然后呢, u r i, 来也,来啥呀? l b, 当然,你这写 a gdp 可不可以啊? 没问题吧?好,然后呢? order service, 这里一定要写服务名称啊,好,然后呢? pedicus pedicus 后边跟上 又是一个杠八 plus, 等于什么?等于 out 吧! 啊?杠星星,那就以凹的打头,按照这个规则吧,非常好。同学们,好,那么到这呢,我们就写好了路由规则了,那不废话,咱们试一试吧,来,能找到网关直接启动。 然后呢,我们来访问一下这个幺零零幺零啊,同学们,好,幺零零幺零,访问到他以后,我后边跟上一个地址,对吧?比如说杠 user user 啊,杠一打回车, 同学们看,成功的查到了 uz 一的这样一个数据啊,那你会注意的是,我们的网关是没有做任何业务逻辑的对不对?但是我却能查到用户信息, 其实这就是把请求从网关路由到了有点的微服,那刚才我们还编写了 oder 的,也就是说你现在去访问 oder, 应该效果是一样的吧, 看是不是也没问题。好的,那我们回到 ppt 啊,这个路由我们就讲完了,刚才在整个路由的过程中,到底发生了什么呢?这里呢,我们给大家画了个流程图, 大家看,这是我们的服务,我们有两个 uzer service, 一个 out service, 还有一个 nice 注册中心,还有网关,我们微服务呢,都会去注册到 nice 注册中心。这个时候用户发起了这样一个请求,幺零零幺零杠一或者杠一, 那因为你的端口访问是幺零零幺零,而我们的网关恰好是这个端口,所以这个请求一定会进入网关,而网关呢,又无法处理这个业务,所以他只能 是基于路由规则去做判断。而我们刚刚定义了两个路由规则吧,哪两个呢?一个是把 uzer 请求开头的路径代理到 uzer service, 一个是把 ouder 开头的路径代理到 ouder service, 那么这个符合哪一条呢? 显然是符合第一条吧,这一条,所以呢,那按照这个, 我们就应该把请求代理到 uzer service, 那下一步网关自然就会拿着 uzir service 去注册中心里找到对应的地址,是吧?然后去做复载均衡,去挑一个,比方说挑到了八零八二,那么这个请求自然就会发到八零八二去了, 那么整个流程就完成。最后呢,我们来做一个总结。网关搭建的一个步骤呢,还是比较简单, 第一步呢就创建一个全新的项目,引入 nicos 和给的未依赖。第二步呢,稍显复杂,主要就是配置服务信息, led 地址,还有路由地址。配置路由的时候啊,东西有点多,但是总结下来主要有这么几点,第一是 vid, 一定要保证不重复。第二呢是路由的目标可以支持固定地址和负载均衡。 第三呢是这个断言,断言是一种规则的判断,符合请求规则了,我就给你转发到对应的服务,不符合你就去找别的路由去。 好,我们刚才的演示中啊,只有这三个对不对?但其实在路由东还可以再配一个东西,叫过滤器, 过滤器可以对进入的请求或者是进入到的响应做一些处理。那么这个呢?我们就会在后续课程中去学习了。好,那我们这节课就到这里。

好,那我们继续啊,嗯,到这呢,我们把这个病的然后生态化基本的一个流程啊,给大家讲明白呢。那下面呢,我们接着往下看啊,看 spring 的后处理器啊,这块倒比较重要呢,因为这个 spring 后处理器啊,是 spring 提供的特别重要的对外扩展点, 而且 spring 然后内部他的一些其他组件啊,包括他在他的一些然后外衣的功能都是使用 spring 后充电器完成的啊。 ok, 那下面我们就看一下他这个对应的概念啊,说 spring 的后充电器是 spring 对外开放的重要扩展点啊,首先要说一下什么叫做扩展点, 就我们知道框架本身他是不是把一些功能都给你封装好呢?对吧?也有一些约定俗成的东西,就是你按照他这个然后配置去配,最终就能完成相应的功能,但是呢,有的时候我们需要而自己 去介入到他这个整个的这个过程当中啊,就换句话说,人家都给你弄好呢,但是呢,我想然后跟他弄好的不一样 啊,我需要特殊的需求,那怎么办呢?此时我们就需要用到然后对应这个框架对外提供的扩展点啊。 ok, 那这个 spring 的扩展点呢,允许我们进入到并的整个实战开发过程当中, 那这是什么意思啊?那回到小回,想一下刚才我们讲的并呢,然后这个初步的一个时尚计划过程,他是不是首先是通过这个就是解析标签 并标签嘛,然后去封装成一个并 definition, 然后存到一个并 definition map 当中,是吧?然后呢 spring 呢这个容器呢,它就从这个并 definition 当中取出每一个并的信息,然后反射创建对象,再存储到一个当时当中,也就是我们的 single turn of this 啊,也是个 map, 对不对?在这个过程当中我们可以他提供接口呢?可以允许我们按照他的要求,然后去配置啊,去编写这个代码,然后最终可以,然后介入到他这个过程当中,那介入的过程作用什么呢?啊?介入他这个过程其实说白就是可以对他的病啊,可以进行相应的修改 啊,就这样一个作用啊,那接着再往后读说,那我们进入到这个并的然后审这个过程当中呢?已达到动态去注册 indiffenation, 动态去修改 indignation, 以及动态去修改并的一个作用。 好,我们说一下。哎,为什么需要动态就注册 indiffination 呢?啊?这个词叫注册啊,其实注册 indiffination 的过程你可认为就是像那个 map 当中,就是我那个 indivision, map 当中干什么呀?啊?就添加一个 indiffination 的,怎么 那个过程就是一个注册过程啊,明白吧?啊?他说的注册其实就是我们创建好一个 bindibination, 要扔到这个卖部当中,然后就 ok 了。为什么扔到这个卖部当中呢? 因为我们知道死不认容器最终是不是要对这个脉搏进行循环便利,是吧?拿出每个病的信息,然后最终是不是创建对象?那我们在这,哎,就有个几年病呢,说我只要往那个脉搏当中去添加一个病进病变身,那死病就会为这个病进病身,干什么?创建后期是不对应的一个病对象, 是,是这意思吧?哎,所以说我们现在不用去配置,就原先我们是在插入当中去配置并标签,对不对?那现在我不用去配置,我只要往这个卖部当中去添加,去注册 一个 been different nation 或修改某一个 been different nation 信息,那最终是不是就会导致他创建并的那个 不一样吧?啊?就改变它创建的那个 b 信息,这,这能明白吧?哎,你比如说我现在 individation 啊, individation, 然后对应那个 某一个 indefinite 的权限的名是 user 的啊,是 userdo 的,那我如果改把那个 indiffination 内部维护的那个什么权限的名叫 inclass 啊,那个权限名我修改成 user service 的,那最终我问大家他创建的那个并对象是什么呢? 是不是 users? user service, 对吧?哎,是这个意思啊。 ok, 那接着再看。说 spin, 我们我们接触的 spin 提供的两种后冲力剂 啊,有两种,一种叫 b factory post processor, 那翻成中文呢?就叫并工厂后充电器。那,那这个并工厂后充电器它是在什么时候执行的呢?它的执行时机是什么时候呢?它 在你的 indefinites map 填充完毕之后啊,就 indefinite 都定好了,都放到这个 map 当中的,那下一步是不是要对这个 map, 然后进行循环,然后取出 indefinite 信息,然后去创建并对象的吧?在创建并对象之前,哎,我去执行就 spring 容器啊,他帮你去调用 并地并 factory pose 的 processor 啊,记住它的一个执行时机啊。好,第二种呢,我们叫并 post processor, 你发现它不是少个 factory 是吧?它叫并后生悲期,它的执行时机是什么时候呢?是在某一个并创建对象之后 啊,某一个并创建对象之后,然后呢?最终是把填充到那个 danglish map 当中,是吧?填充到这个 map 之前执行, ok, 这个明白吧?所以通过这两段话我们读取,你可以看一下啊,就是说我这个 befactory post processor 啊,它其实执行一次, 他为什么执行一次呢?因为最终他是把所有的 indifferent 卖吧,扔到这个卖不及格当中,是不是执行一次 indeed befactor post process 吧,而我这个并 pose processor 呢,每个并创建完毕之后,他都会去执行一次, ok 吧,这是关于我们这个 be factory post processor 跟并 post processor 啊,它这个区别,这两种都很重要啊,对于 spring 这个地方都很重要啊。下面呢,我们就先看第一个关于 be factory post processor 啊,首先说呢,它这个接触规范 啊,就是规范,然后实现该接口上给,只要交给 spring 容器管理,那么 spring 就会干什么? 在那个 map 最终填充就是那个 individence map 填充完毕之后呢,他就会帮你去调用这个 be factory post processor 内部提供的那些方法 啊,就有一些回调方法啊,这,这就没有啊,这句话啊, ok, 那实现该接口的这个就实现 b 翻水 pose 不再是接口这种 a 只要交给 speed 容器管理,那这句话什么意思啊? 说白就是你自己定一下 gay, 然后实现那个接口,然后选中后呢,把当前这个 being factory post processor 这个实线 gay 配,就配置给 spa 容器就行,那 spa 容器就会自动帮你去调用它内部定义好的一些,就规定好的一些方法 啊,那下面呢这个地方然后给大家看呢,就是这个 b factory post processor, 它对应这个方法啊,就是 post processor b factory 啊,这个当这个我们也可以通过原码去看一下啊。 ok, 呃,稍等,我们找到我们的代码区。 shift shift 是吧?叫宾 factory post processor 啊,是不是第一个啊?所以说是个接口是吧?哎,是个功能性接口,它提用的方法是不是一个吧,叫 post processor b factory 啊,对应它的参数就一个 啊,这一个什么呀?叫 configuable list 哦,什么 beat factory? 但这这这是个什么东西啊? 它其实本身就是那个 bifactory 对应的一个此接口,你看他实验的谁啊?他继承了谁,是不是继承了,然后是吧 listable bifactory 吧。嗯,再走是不是就 bifactory 呢啊?他说这层关系啊这种 关系。那下面呢按照刚才我们说的去讲解呢,我们就简单做个快速入门啊。好,在这我再去创建一个包啊,这个包呢,我就叫 processor 吧,叫 processor 好包,创建好之后呢,内部我就创建一个,我就叫 my my be factory post processor 是吧?哎, my big factory post processor 好,创建好之后呢?他需要实现谁啊?是不实现我们那个叫 big factory post processor 吧, big factory pose 不在这。好,那我试验它的方法就一个吧,这种参数其实说白就是谁就是我那个 big factory, 哎哎哎哎,就是 befitra。 首先呢第一步呢,我先验证它是能执行的啊,所以在这打句话 说这个 been definition map 是吧,填充完毕后, 完毕后干什么去执行该方法就回调该方法吧,回调谁就回调 sept 容器帮我回调对不对?我在这只管写写代码。我不用,不用人为去调这个方法,因为 sept 容器会帮我去回调回调该方法。哎呦嘿, 方法是吧,那这样写完之后不行是不?还有一步,你得把它交给谁?交给 sport 容器去管是吧?啊?去管给才行,所以右键我 copy rivers。 找到我们的配置文件啊,现在配置文件是 一个 user, 一个 service 吧。好,我直接在这儿配个 in 就行。 嗯,可以呢,我就播一下取 id 呢啊,因为我不是,我最终是不用 get 并去获取它是吧?它只要存在容器当中, speed 容器它识别到会自动帮你。在一定的时机是不是掉这方法吧。好,现在呢,我们回到测试代码 test。 呃,在这里干什么呢?或者 service 或者丢,这都无所谓呢。那现在啊,我去执行我们这个控制台,对不对?那你看 是不是调用了,所以它的入门很简单,无非就是什么,创建 a 实验这个接口,然后呢,覆盖它的方法, 然后把这个 beat 干什么呀?是不是配置到我的容器当中,是不是可以呢吧。哎,就这个意思, 那我们其实再看一下,它到底能干什么用呢?什么用?你看在这地方,你是不是都拿到这个 big factory 呢吧,是不是拿到 big factory 呢?那拿到 big factory 呢?对应是不是拿可以,然后对内部的 big 就是它内部 big factory 内部是不是维护的那个卖部?是不是对那个卖部,然后进行内部的 differentiate? 是不是进行修改啊? 好,那在这看啊,干这么一件事啊,比如在这我就修改某个 indiffection, 对吧?那这个 be factory 呢?其实我们想到的是什么呢?是,它是不是可以叫 get, 那个叫 individence map, 是吧?你发现它提供没有?提供 get individence map 的 api, 就换卷时候,我们是不是拿到对应的那个 map? 整个 map 是吧?它没有提供,因为急于安全 期间他不会让你拿到整个卖部的,你拿到整整个卖部一清空。哇塞,那你,你整个不等等于这个,这个死病了,配置病不都没有了吗?是吧?但是呢,他允许你根据名字去获取某一个 indifferation。 根据名字这个地方是个啥?是个编内幕啊,根据名字去获取某一个,对不对?那我们看一下配置文件啊,在配置文件当中我是配一个 do 呢, 是吧?是不是也配置一个这个,这个,这个是不是 service 呢?是吧?也配置 d o 呢?是不是也配置 service 呢?那大家想,我们现在咱咱这个先不管它,就现在我这个 individual nation, 是不是有个叫 user d o 的 individation? 是不是还有个 user service 的 individation 是意思吧?好,那下边我,我干什么事?我干这么事。看着啊,我如果在 get b 时,我 get b, get b 时我的如果省的 名字是 userdo, 那什么意思啊?那最终你获取的是不是那个 userdo 的那个变对象?我如果在 get beat 时,省的并内幕是 user service, 那最终是你获得这个 user service mpr。 好,现在我干这么一件。看着啊,我在这,我修改一下, 就是在这,这样,我获得这个,哎,这个名字为 user service 那个 individation。 好,最终你是不是得到一个 bin bin different, 那意思 得到是 beautiful 健身的吧?我干嘛呢?它内部还记得有什么吗?还记得吧,它是不是有个叫什么呀?有个叫,你点进去看它是不是有个叫这个啊,应该叫这个是吧。 set bean class name 设置是不是这个 并对应的权限的名就叫全猫名吧,对不对?我现在可以干这么一件事。看着啊,我修改一下 set 兵 class name 原先这个 be service 的,是不是肯定 com 点 i d 黑马点儿,是不是 service 点 m p r 叫 youth service 是吧?好,现在我改成它 com 点 it 黑马点儿,这个叫叫叫叫,叫 do 点 i m p l 点儿。哎,怎么是逗号呢? 点撇点叫叫点什么呀?点 use d a o 还撇,你看这什么意思? 我这是不是硬生生的把这个 user service 这个对应的 been definition 内部的这个 being class name 就是那个权限名,是不是硬生生把它改成 d o 呢?是的吧,那 改完之后你后期再去获取 user service, 你还是 user service 对象吗?不是呢,他是不是就变成 user 丢对象了吧。好,现在啊,我把它改完了,改完之后就完事了啊,那现在我去测试,我现在不获得 service 吧,我打一下 user service。 好,我为测试的更加明显一点啊,我这样,我先把这个助调先。助调是吧,我们执行一遍,我们看最终打印的是不是一个 service。 是 service 啊,你这个地方是不是获取 service 肯定是打 service 啊。好,那现在我再把它打开啊,把刚才这代码打开啊,我是不是做手脚呢,对不对?好,你再执行。 哎,是报错呢,是吧?是报什么错呢?瞅一眼不能发现 com it 我写错了是吧?哎呀,好尴尬呀,是吧? it 黑马是不是 d o 是不是写错了是吧?好,再执行 看打药啊。哎,怎么还爆错呢? 这是什么意思啊?说 error create 啊,这个 user service defined, 这个是吧? error? 什么什么 error 呢? setting properties 报错呢?啊,我知道什么意思, 我这有个设置啊,是不是有设属性是吧?哎,我把它先注掉啊,先注掉现在这个 d o 啊,现在 d o 跟这个啊 usual set, 单纯的啊,单纯的。那现在我在执行, 你会发现什么?哎,怎么还报错 啊?这,这就是应该报错是吧?为什么报错呢?他这个地方, 那地方,我是不是获得 user service 吧?获得 user service, 你现在是不是尝试要把它转换成 user service? 它这报的是转化异常,对吧?我们这样我们不转它啊,不转它 我就让他还是 offict。 这行吧,你再执行就不转,不会报错呢啊,我们看打印的最最终是什么? 是不是一个 do, 但是你这获得是不 service, 并且在配置文件配的时候,这个 user service 对应是不是就有个 service, 是吧?哎,就是个 service, 那最终为什么他给我反不是 service 呢?而这个 d o 呢?就是因为我们在这个拼 post processor 啊,变返是 pose processor 当中做手脚呢。 我们动态的把这个 service 的权限里面是不是改成 d o 的,所以最终在终端获取的时候,它就变成个 d o 呢?行不行?哎,这就是关于我们这个 big factory post 摆在这一个快速门那个操作啊, 有什么用呢?嗯,一会我们再说吧。哎,我先在这停一个啊。

好,刚才呢我们就使用代码把 supreme 快速入门,然后给写完的,对吧?我们再回头去看一下这个代码啊, 在这个代码当中啊,我们是编写接口呢,编写接口对应的实线,这个没有什么过多要去说的,对不对?抛出这个之外呢,我们还有就是对应的配置文件,还有就是我们这个对应的客户端代码,对不对?这个配置文件我们看一下,在这个内部我们编写的是并标签,是吧?并标签内部有对应的属性, 当然刨出这些属性之外还有哪些属性要去讲呢?那在这个配置文件当中,刨出这个并标签之外,还有没有其他然后标签可以供我们去学习呢?这些我们是不是需要详细的讲一下对不对?好,那 我们再看这个对应的这个测试代码,这个测试代码呢?那这些代码到底都是什么意思呢?我们是不是也需要详细给大家讲?所以 说呢,我们下边剩余的部分就是关于 surping 的配置文件,与 stele 相关的被骗 surping 的配置文件这一块呢,然后比较内容比较多,我们可能讲的时间比较长一些啊,好,下面我们就往后翻一下,看一下 surpring 配置文件的配置啊。首先我们看第一个就是关于 并标签的基本配置,那什么叫并标签的基本配置啊?其实说的就是刚才我们在配置过程当中配置的这个并标签的 id 属性,跟我们这个全限定名的这个属性,对吧?这个 id 的作用是干什么呢?是微信标识 对吧?哎,我们要通过这个 id 去获得对应的对象对不对?那这个 id 既然是微型标识,那就意味着在这个配置文件内部,我这个 id 允不许重复?不允许重复对不对?哎,大家就记住, 只要在某个地方,你学习到他只要是个 id, 是个微信标识,那他就不允许重复,对不对?后边这个地方呢,是全限定名是吧?全限定名,大家知道这个东西呢?默认情况下,我们的反射是通过无仓构造去创建对象的 对不对?牛 exx 是不是找的无仓构造啊?所以说这个死不认,其实末的情况下,他也是要找的是无仓构造,那就得保证我们如果这么配的话,得保证我们这个, 哎,这个并内部必须存在无仓构造,对不对?好,那回到我们的 ppt, 这个呢,我就不过多给大家说了啊,很简单,那接着再往下看看。第二个就是关于并标签的一个范围配置啊, stop 啊, stople, 那这个 stople 翻译成中文是不是叫范围的意思是吧?那他的范围有哪些曲直呢?哎,我们可以看一下,这个地方有五种曲直, 第一个叫新勾衬对吧?第二个呢,叫 polt、 太保锐、筷子三十个,多薄三十。我们分别去介绍第一个新勾衬,他其实发生作用就是单一的,单个的, 而且他是一个默认值,也就意味着我刚才这个并标签是不是没有配置 stop 对不对?那他有没有这个 stop 呢?是有的,因为他默认是心够疼的啊,心够疼的,那这个心够疼呢?其实就意味着在容器当中存在这个对象只有几个, 只有一个对不对?那第二个坡的太棒,他翻译成中文叫圆形,在这个地方是端立的,意思 意味着如果你要将这个病这是告别配这种 pro 太棒,那你在容从容器当中拿这个最硬的病对象时,他有几个对象?有多个对象,每次你在盖特被时,他都会给你获得一个 新的对象。瑞筷子的塞身个 logo 塞身,这三个意思差不多,也就是当你在创建完对象之后, 那死不认会把这个对象放到容器的同时呢,也会把他的对象放到对应的乳筷子浴啊,塞塞浴啊,全局的塞塞浴啊,哎,都会放一份,你就可以方便然后去获取,但是这三个的配置需要在一个哎外部环境下啊, 外捧先下啊。好,那下面呢,我们就给大家主要测试一下这个新购特跟 pro, 大家主要把这个新购这个 prot, 然后记住就可以。好,下面我们进行测试啊,回到我们这个配置当中, 在这个地方我配下 stople 中啊,但这个代码呢,我这样,因为后期我用到的测试比较多,所以说呢,我就单独的去创建一个单元测试啊,在这个地方啊,太子包下边有个扎袜啊,在这地方我去创建一下,比如 c o m 就有 it 黑马就有太子的包是吧? 好,下面呢,比如说有个叫 stease 吧 seven case。 好,那我要进行这个测试呢,我得借助于这个这 uni 家庭测试是吧,哎,我就在我的这个后面的插苗当中,我再影个坐标啊,就影个这 unit, 哎,这有那条 版本的版本我就选,呃,四点一点一吧,四点一点一 四件哎,幺幺可以吧。好,那回到这我们进行相的测试啊,编写一个测试方法啊, v id, 比如 past 一, 好,在这我加一个注视,这测试什么呢?这是测试 stop 属性, 可以吧。这个代码呢?然后我就不写呢,我从刚才这个地方去 copy 一份啊,刚才在扎瓦下边,呆萌下边,哎,第一句,第二句,我把它 cop 一下, ok, 放到这,是吧?那我要测这个对象到底是一个还是多个?在容器当中,我只要测他地址就行,是不是?那如果地址哎, 是同一个,那意味容器当中是不是存在一份?如果,然后地址不相同,那,那代表容器当中是不是存在多个,对不对?好,所以说我在这呢,我就把它,然后这个写个一,再 copy 一份, 好,再扣一份在这,我写个二,哎,写个二,然后呢?我对这个地址呢?然后进行打印, out 油子滴油一,是吧?然后呢,再打一下 out 油子滴油二,好,那下边我们开始测试啊,选中右键运行 好,稍等一下看控制台地址,哎,这呢,大家发现一样不一样,地址是不一样的吧,如果遗忘一样的,是不是说明在词不容器当中,我这 这个 u 字肌肉的并存在几个?一个啊,一个,那这也是我这个以往 stople 配置新构成的一个效果啊。那我把它删掉,改一下,改成谁呢?我们再改成 polt 太棒,对吧?改成 polt 太棒,那再回到这代码 把它关掉啊,回到这个地方代码用改吗?代码不用改,我们选中右键再去执行。 好,那我们再看一下,地址一样吗?不一样对不对?那如果地址不一样代表什么呀?代表现在容器当中存在的 u 字 du 是一个吗?不是一个,而是多个,对不对?哎,这就是 stop stople 这个新勾衬跟 potep 的一个哎,主要的应用的吧。