好吧,那介绍完基于扎苗死不人应用啊这些东西之后呢,那我们就一个一个去学习,首先呢,我们先学习死不人并的一些基本的配置啊,也是一些比较基础的东西,那我们来看一下, 首先呢, 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 的,这个涉及的是并的,然后这个创建方式,这个我们一会再给大家讲这个地方,然后一句话半句话我们说不明白啊。 行吧,这是关于我们这个并标签,其实涉及的主要的配置在这基本哦,都在说全的啊,当然还有一些可能不是特别经常用的基本,然后你一辈子见不着一次的啊,在这我就没有涉及啊,就非常少呢,这个地方已经非常全的啊。
粉丝7.8万获赞28.5万

好吧,那我们继续啊,刚才我们说静态共产方法方式之外,之后呢?那我们就说一下这个十 a 共产方法。十 a 共产方法我刚才说的跟静态的区别在于就不是死代的意思,对不对?那我们回到代表当中,我们再写一个啊, 在这呢,我把那个叫 factory, my bin factory 是吧?考比分,我把它变成二,对吧?但是说要改个东西啊,改谁啊?把 stay 的给干掉, 行吧。哎。把 stadi 给干掉,那干掉之后呢?我要主要是配是吧?怎么去配呢?回到的配置文件当中, 在这我再写一个,并,大家首先要知道啊,静态工厂首先他在吊用时,他必须先有对象,在 用对象式调方法,而静态工厂方式是不需要创建对象,直接他就调方法,这点能区分开对不对?所以说你在这配置时,你必须先配这个工厂,让死不润容器帮你产生工厂对象,然后再说让工厂对象拿这个对象去调这个方法, 这这这能懂啊?所以说在这你首先要干嘛呀?你先得配置工厂对象, 是不是工厂对象怎么配?工厂对象就是个普通遍,原先怎么配,现在还怎么骗啊,原先怎么配啊,不就把他拷配全写你名是不是?是不是扔这是吧?是不是起个名字? 哎,对,因为你是个工厂的,现在他的意义是个工厂的啊,我就叫麦 be factor, 有没有?工厂 拍完之后再去配谁?你是不是再去配那个?呃,这个工厂方法的这个这返回值吧,也就再去配这个 uziu 是吧。哎,他去配 pid, 你会起名字呢?比如说叫优子精油二吧。 行吧,那后面怎么写呢?那我问大家,现在你要要要用到这个 u z d u 二,最终产生 u z u 二源于谁啊?是不是源于这个工厂对象当中的这个方法呀?哎,所以说你就把工厂对象是谁,把这个方法是谁,你告诉这个配置就 ok 了, 你看看是不是有啊,看是不是有 fake 吹,什么?什么玩意哎? fake 吹 bing, 你告诉他过往对象谁啊?哦,过往对象是 my bin fake 吹二, 那工厂对象内部的方法是谁啊?哎,这翻出也没事的哎,是他内部的那个叫优字街欧,是不是他,他内部是不也也是叫优字街欧吧?好, 还差就完事了,对吧?那你在调时的时候是我,我去找谁是不?盖被时我去找优字第二,那优字第二什么内部?去这个四门容器帮你找谁是不找然后这个工厂对象的内部的优字第二的方法,这个方法最终的返回值 是不是最终我这个 uz gu 二啊?这也能明白吧?好,那下面呢,我就给他实现一下啊,在这就改盖就完事了,最终得执行, 可以吧?那其实打完断点之后呢,我们再看一下他刚才 才那个静态工厂方法的区别在于,现在在这个当地时当中,比 factory single offic 进去不仅包括我这个 uzdu 二 u 字,第二就就是我这个 u 字丢按篇的对象,是吧?他还包含谁呢?还包含麦这呢?麦 be factor, 你看就是那个麦 be factor 二的那个对象啊,那其实大家看一下,他有那个麦 be factor 一的那个对象吗?就这个这个对象有没有?没有为什么?因为他这个竞猜工厂建议工厂不用传达对象,直接叫方法就行,所以他没有这个麦 be factor 一 啊,这个是然后我们这个静态工厂方法跟非静态工工厂方法去产生病的一个区别啊。那 回到这又再说那十个一共产方法,他产生病这种方式有什么用呢?嗯, 同样第一个用处,也是也是干嘛,也是我可以在创建我这个对象之前或之后干嘛,我可以然后做一些自己的一些义务代码操作啊,这是自定义的工厂是吧?那还有就是说在我们其实日常开发当中啊, 还说有些第三方的其他,然后第三方的一些炸包当中的病人家已经写好了,他不受自定义的,而他内部的某些病的然后产生,就是通过某些方法 啊,某些对象的方法就产生的。而那个时候你在配置时,你就可以按照这种啊非竞赛工厂方式方法的方式去配置就行啊,那像这种然后例子就太多了啊,当然我们这课程当中后边也会遇到过,遇到一些 啊,我给大家到时候我们去再讲解教这个意思啊,就是就是第三方的有些病的产生啊,并不是通过构造产生的,他也是通过什么某些对象的方法去产生的这个病, 所以此时像这种病如果我要交给死病去管的话,我就用这种非静态方,也就实力共产方法的方式去配置, ok。

好吧,那我们继续啊,刚才呢,我们把这个静态工厂方法方式跟非静态工厂方法方式啊去创建并,然后给大家说完了。那下面看第三种啊,第三种相对稍微复杂一点啊。 呃, spring, 然后底层呢?用这种方式比较多啊,我们在开发时用的也不是特别多,但有时候面试呢会问大家,所以说把这种方式我给大家讲一下,就是实现然后发出并的规范方式啊。那为什么延迟省略化病呢?一会我们打断点可以看一下,他不是马上把这个病给你创建,是你在用的时候再创建 啊。那首先来看一下这个 factory 并啊到底是什么?好,那现在我们切到我们的代码区,然后 shift shift, 我们搜一下 factory 啊并啊。第一个首先说它是个接口啊,它是接口规范,对吧? factory 并其实翻译成中文叫什么?就工厂并 啊,叫工厂病,他主要的作用在于定义工厂病的规范的。就幻想说如果你定一样类,然后实现这个赛车病,那你定义的这个类是吧,也会变成一个工厂病,那工厂病的作用什么呀? 工厂变的作用是不是就是造对象的吧?啊? ok, 那在他内部呢,然后提供这么几个方法,你看一下啊,一个叫该淘宝这个特 啊 get o break, 那这个方法然后再被调动时呢,返回的是一个 t, 这个 t 是谁呢?其实就是在这个呃,接口 factory 并的这个位置有一个费形的 t 是吧?啊,比如说我这个 factory 并想产生一个 userdo, 那么你这个发型是不是 userdo 啊?最重要这个地方返回的是不是 userdo? ok 啊,还有就是 get object type 啊,说白就是返回当前这个呃,这个 object 的一个类型,是吧?还 意思 singleton 啊,是否是一个当地的啊? ok, 那着重其实我们就看这个方法就行啊,那实现这个就说这个 factory 并的这个东西啊,这个 nba 也可以是个工厂,它内部也会去调用这个改 top 这个的去产生并,但是跟我们之前,然后不管是静态还是非静态方法 啊,这种方式啊,他的区别在于我们静态工厂方法也好,非静态工厂方法也好,他其实那个方法都是自定义的,就名字自己都都是自定义的,名字都自定义的,所以说你的配置是你需要在你的配置文件当中,对吧?哎,要表要标明你这个工厂方法叫什么, 是这意思吧。但是呢,当你实现这个,实现这个,然后 fact 并之后呢,你就不用再去标注然后那个工厂方法是谁了,因为本身这个接口他的规范内部就是 工厂方法,就是 get optic 的啊,就这一点。好,那下面呢,我们先呃简单的写一个,然后看一下最终能不能帮我们去产生这个并,然后我们再去挖他的细节啊。首先呢,在这个地方呢,我再 copy 一个, 我叫 my big factory 三,是吧?哎,当这个三呢,这些方法就都不要呢,是吧?它需要实现。嗯,我们那个 factory 并啊,这个发型呢,我就产生 user d o 吧,可以吧?哎,它有个方法, 一个是 get optic type, 就你返回的这个 b 的类型是什么,反而变的类型就是它呀, 对吧?然后这个地儿呢,返回这个 b 是谁是吧?当然我前后也可以做对应的一个逻辑,只要是供上方法,然后前后都能做逻辑是吧?在这我因为我 是简单给大家讲这知识点,所以说我们就没有什么业务直接就返回这个 user 啊。 newgadio 安片,那就完事了,是吧?完之后呢?正常配就行啊,正常配,然后在你的容器,在你的这个插门当中,你就正常去配置它就行。变 全,哎,不对,全信里面是吧?右键 copy references 走,扔这, 那这就可以了是吧?但是你在获取时,你得指定个名字 id, 我就给个 id 吧,我就叫 user d a o 啊三吧, 啊,叫 userdo 三是吧?当你去找 get 被时,根据 userdo 三这个 b name, 然后最终获取的是它吗?不是,它,是它内部的这个 get object 这个方法返回的这个对象,说白就是 userdo 是吧?好,那我们先测试啊,测试呢,在这呢。呃,把它改成三三三,好,那么直行。 好,重点我们看下控制台打印的这个 user d o 三是谁?是不就是 use d o n p r。 这没你吧。其实这种方式啊,跟刚才我们静态还说非静态那个工厂方式方法方式是差不多的,只不过在这你不需要额外去指定方法呢,他是有具备一定规范的是吧?你只要按照规范的配置,最终在这个,呃,这个相当于这个工厂方法内部去返回对应的神秘就 ok 了 啊,最终也产生了,这没什么问题是吧?好,这个当你没有问题之后,我们就看下细节啊,看下细节啊,回到 test 这个位置,打一断点啊,就在打到这吧,然后我们用第八个模式去进行它, 好,下一步,下一步到这呢,我们的配置文件加载完毕,然后 spring 工厂啊, spring 这个容器是不是创造完毕的吧?然后我们同样去看谁呢?去看一下这个他内部内部维护的这个 bifection, 然后内部再维护的这个 singleton of 这个丝 也用,把它叫做当立池,对不对?好,点进去, table 点进去,哎,你去找它有没有 user deal 三啊? 哎,发现摇一二是不是不都有,三也是不也有,是吧?你点开一,你会发现一 be name 就是 u z d o 一,那对应的值呢?是不是 u z d o n 撇儿的对象,是吧?那点开二呢?你看一下它对应的 k 就是这个 b, name 也是 u z d o 二, 那值呢?是不是也是 u z d o n p r 对不对? ok, 把它关掉。但是你在看我们 u z d o 三 啊, using factory 三 be name 是不 used to 三,但对呢指引发现是谁是谁?是 my bin factory 三啊? my bin factory 三,你会发现他好像并不是我真正要产生的那个,是不是 user deal 对象吧?他是工厂 哎,他把这个冰内门跟工厂上放一块,是不存到这个当地池当中,是吧?但是最终你看,我只把它执行完啊,执行完走,执行完最终空来打印的确实是个 u 的 du。 那这个怎么去解释呢? 哎,这个其实它是这么回事,你看着啊,这种方式相对相对比较特殊啊,我下一步走啊,走到这啊,走到这,走到这之后呢?刚才我们看到呢这个,然后这个 factory, 呃,这个 b factory 当中的这个单立词当中 single of 这个思当中确实是 这个 u z d o 三,是吧?对应的就是我们当前这个工厂对象啊,就是自己。然后这个 fact b 啊,这个工厂对象啊,那对应的这个真正的 u z d o 三在哪呢? 在哪呢?哎,你往下找,把这关掉,把这关掉啊,把这关掉。然后呢?呃,你往下找,他有一个叫 ficture, 哎呦,这个字有点小,这眼睛看着有点花呢, 稍等稍等啊,这呢?哎,别跑,跑哪呢啊?这 factor bin, 哦,这个 catch, 这是什么呀?啊?首先说是个 map, 对不对? factory bin, 哎,我们当前这个是 不是 factory bin, 是吧? factory bin, 哦,不,这个的 catch 是个缓存,你发现现在是空的,什么都没有,是不是什么都没有吧。好,再往下直行一步啊,当 get bin, 现在我获取 user userdo 三啊,再往下走一步走, 你才发现它有没有东西呢?哎,它是不是有东西呢?点开看有什么东西,是不是 u z d o 三, u d o 三对应的谁?你看是不就 u z d o m 片儿 明白了吧,所以最终你在,你在,就是你在测试时这个地方返回的这个 u z u 三,它存哪呢?它缓存到哪呢?是不?缓存到这个 factory bin object catch 当中,缓存到这个位置,所以从这个位置给它返回的, ok 吧?哎,这个你稍微记一下,这不是特别重要啊,因为涉及底层的东西,还是说你不懂,你也正常的开发,但是 面试问的时候,你如果能说出你肯定要加工资吗?对吧? ok, 是这个,这个东西大家要知道啊,所以说,那为什么说延迟呢?你会发现刚才我在执行盖的被时,就我在执行盖被之前,我把现在都跑掉啊。往前走,我稍微讲一下,就是当你要加载配置文件,然后创建水温容器的时候, 那他这 get b 方法有没有调用?没有调用啊,他是没有调用的,当你然后在执行 get b 时, 他才去调用的。这个什么呀?这个这个这个,这个 my b factor 三的这个 get obj 的方法,才把最终返回的这个 uzdo 给你存到刚才我们看的那个什么 catch 当中那个缓存当中, 明白吧?当在这地方你可以做个实验。那怎么做实验?打一句话说, get obj 的被调用 教用,对吧?他什么时候被教用的?好执行? 看着啊,现在啊,往前走一步,是不是加载配置文件,创建 spa 容器,对不对?哎,看控制台,你看那个叫什么什么 get, 哦,不,这个有没有被调?没调用,什么时候被调用?当你去真正用到 deu 三的时候,它没有啊, 他都没有。但是他那个工厂是不是已经被放到那个单位时当中的吧?那工厂那不是有盖的 oppo 这个方法?所以当你真正再去用的时候,他去再去调那盖的 op 这个方法你看是不是盖的 oppo 这个才被调用。 交完之后返回的这个对象存哪呢?是不存到刚才我们说的这个叫哎呦,哎呦,不要找一找特别 费劲是吧?哦,呃,那个等等会啊,别翻水是吧?往下走,是不是他在帮你缓 get obj 的方法?调完没之后,他再将返回的这个真实的对象缓存到哪啊?是不缓存呢?叫 fakertree bean obj 的 catch。 哎呀,就这个字有点。这的是不是缓存?缓存到这是缓存完之后是不是再给你返回,返回你的返回到你的程序代码是不是才能用? ok, 那下次我再去调用呢?比如我问大家,我如果再写个 get oppo 这个呢?来, 我再写个 get off 这个三呢?他还会重新创建吗?不会,因为他先从缓存查有没有是吧? user 丢三这个这个病呢?有直接是不是就返回呢?哎,所以说他然后最终的结论都是这样的, 就说你用这种方式去实现,用这种方式是是实现他对这个病的创建是有延迟功能的 啊。延迟功能,当你真正用到这个并的时候啊,就真正 get b 时,我才去调用 get optict, 把返回的对象给你存到一个什么呀?一个 factory bintoptic cat 这个缓存当中 是不是就缓存解答,下次你再去,然后去找这个对应的这个并对应这个,并根据名字去找他,他不会再去调用盖的。哦,不对的,直接从哪?从我们那个缓存当中去从这个缓存直接拿用就行了 啊,是这种方式。呃,其实这种方式好处是什么呢?我们平常还说开发,然后一般不会自己去实现,用的比较少,但是在 speed 原码底层呢,很多地方 都用到这种方式啊。他的好处在于我可以干什么?可以先临时把你产生的某些病需就需要产生某些病的这个需求先存一下,但是我产生没有产生,这个病还没有产生,什么时候用,到时候我什么时候再去产生, ok 吧。好,这是关于我们第三种方式啊。第三种方式,好,这三种方式都讲完了是吧?呃,这种方三种方式,我说一下,其实在我们真正实际开发当中啊。呃, 我们配这工厂方式去产生病的场景并不是特别多,但是呢,他也作为一个我认为是相对而言比较重要的知识点,因为病其实产生就是死病,产生病的这个方式刨这个经常用的。然后这个,这个这, 这个呃构造之外就是我们这个工厂方式的,所以工厂的这种三种方式我希望大家记一下啊,以以防面试,然后去问大家。

好吧,那我们继续啊,呃,到这呢,我们就把死不认他的一个默认标签啊给大家,然后说完呢,是吧?四个啊,变死,然后并 input 跟 universe。 那下面呢,我们再回头去看一下,我们这个 就非自定义命名空间的标签啊,我们说这个非自定义命名空间标签啊,他的使用过程,首先你要去引入人家的命名空间, 对吧?引,引入命名空间的时候你要指定个前缀,因为这个前缀是你在用到该命名空间那边的标签时,要用这个前缀去引用, 这意思吧,那这个然后他的一个解析呢?然后我们后期会讲,再讲 spring 去整合其他框架时啊,就在本部分我们给大家讲,然后现在呢,我只给大家说一下,然后怎么去引啊?这个引的过程我们要知道,那比如说呢,我就引几个吧啊?引几个啊,呃,把这些我把它去 去掉啊,刚才其实我们已经演出一个 contacts 了,是吧?哎,我们再演出其他的吧啊,比如说我现在要演 mvc 的就死不如演 mvc。 在开发时你这个要用这个标签的过程什么的。首先第一步我们需要导坐标 啊,去导入死就是死,不然 mvc 对应的坐标啊,因为它这个内部这个约束啊,就在人家那个对应的扎包内部封装着呢啊,所以你得导坐标,然后最终你引入它才有意义, 对吧?你没有找人家那个坐标,你即使引入秘密空间,报错不报错放一边是吧?你这边是没法解析的,因为解析这个对应标签的这个功能的那些代码 啊,都在哪儿啊?都在人家那个炸包内部封装了呢。所以第一步你要导坐标,比如说现在 spread vc 啊。呃,我找到 pom 一般那些, 比如我导一个叫 spring y 版 m v c, 那么导入坐标呢?第一步第二步呢,就在这改,只要是 spring 的东西,就是 spring 自己的组件,你可以在这直接改 copy 一份, 就说这地方变灰色,什么意思啊?这地方变灰色是代表这个空间,你引入呢,但是你并并没有用到他对应的那个标签,明白吧?比如 contex 这个空间有引入呢啊,但是我没有用到对应的标签,你比如说随便用一个吧, 你看你这样这样是不是就变色,就就就就就就不是灰色的,是吧?那比如说呢,现在我还说咱回到那个 mvc 那个地方啊, 第一步我也 spring vc 的坐标也入呢。第二步呢,你把这个 copy 粉,大家还说前提你是什么呀?前提你是 spring 自己的组建啊,他 还有规律改着啊,其他的,然后你说也就第三方的一个一个秘密空间,他不是这样的地址啊,对吧?你改你也不知道什么,你就得去抄,对不对?好在这比如说我把它改成 mvc 啊,这个地方也是 m v c, 好命名空间也是,之后呢,没完把它 copy 分,你要记住它是一对的啊,它是一对 copy 好,改它改成 m v c, 它改成 m v c。 有可以忽视的地方,就这个地儿啊,这个地儿也改 m v c。 刚才是改 m v c 是变灰的吧,哎,这就没有问题的,那没有问题之后呢?你在这尖角号 mvc, 你发现是不是有提示呢?那证明眼睛就没有问题的,是吧?你该随便用 mvc 的,然后 这个这个,这个对应的这个标签就开始引入了啊,不管是 contex 还是 m v c, 这其实都是死命自己的组件的,对吧?自己的组件,比如在演个第三方的吧,比如说搞一个,我这个 ppt 上写的是 double 是吧?那行,我们演个 double 的啊, double。 首先说你这个命名空间是什么咱就不知道了, 是吧?哎,名目空间是啥咱就不知道了,咱就需要一会百度啊,去抄一下啊, google 去抄一下。首先还按照步骤,第一步要干嘛?第一步要引坐标对不对?在这我引一个 w 坐标, 因为 double, 现在这个 reposer 仓库有啊,所以我就直接写呢, ok, 二点儿全是五的是吧?好,引完之后第二步呢?要引证,这你就别 copy 了,你说这个 copy 一份吧,我 copy 一份 double 吗?改成 double。 你这这这不行啊,这不,这不扯淡吗?这不 对吧,你这这这,不死不认死不认的吗?所以这个地址是啥?密密空间是啥咱就不知道了,不知道怎么办?抄嘛,百度嘛,对不对?哎,比如叫 d u b b o, double, double 什么呢?快速入门, 哎,这个应该有快速入门啊。嗯,找一个吧。哎,往下走,快速入门应该有啊,是什么?你这 w 是不是没学过?你根本就不用管,你知道我用了,用了他的标签,他是第三方的,我需要引,是吧? 没有配置吗?哎,这呢,哎,这有段配置是吧?哎,这,你看这,哎,这是密密空间吧,哎, copy 行吧,哎,扔到这密密空间有呢,是吧?然后对应是不是得 skimmer 是吧?找 skimmer 在哪 哪呢?你再找。对啊, skimmer location 是吧?下边这是 beans 的啊,这儿呢吧? double 的,这是密密空间,这是 double 的,然后 skimmer 的,然后那个位置行一对儿啊,这是一对 copy 扔这儿是吧? 哎,为好看,我再回车一下规整一下是吧?哎,这是 memo 空间,这是对应 skimmer 的那个映射啊,就文件映射地址是吧。选中了呢?好,你再往下走,我要用到这个 double memo 空间的标签哎, d u b b u 看有没有哎,是不是就有呢,明白不?哎,这就可以了。 行吧,这是引入第三方命名空间啊,使用内部的标签,这个过程先引坐标啊,引入人家炸包,然后再去干什么?去找或抄,就抄对应的这个 这个命名空间跟这个 skimmer 一个位置,然后再去根据什么呀?根据他这个前缀去使用他的标签 cam 这标签啊, okay。 行吧。到这呢,我们这个 spring 配置它的这个自定义的这个标签跟它的,然后默认标签这块我们就都刷了啊。

好那我们继续啊下边呢我们看一下这个往下走哎看一下这个并的延迟加载 啊第四个呢吧啊上第三我们说的是这个 scop 吗哎这个延迟加载呢无非就是说当你配完之后呢因为默认情况下我们知道啊我们给 casen contex 这个是立即加载,就当这个容器然后加载完毕之后马上创建并是吧啊当你要不想让他马上帮你创这个并呢你就在配置的时候加一个 v z 已 net 啊言理解是比较懒惰的是吧你那叫初始化是吧是否然后延迟加载呢。延迟初始化呢你写个处那他就不会马上帮你创建完这个病呢。那什么时候创建呢当你盖的病是用到时他就帮你创建 并且创建完毕之后呢再你放到那个 single turn object 那个当地池当中啊。 ok 那我在这然后先说一句啊这个 lazy need 对于 befactory 是无效的啊如果你扣掉用 befactory 你配不配?你说这个它不颜值加载吗我把这个 lazy need 配成 forth 能不能马上就帮我创建。不会,所以说这个 lazy need 它是属于 呃这个 omg key kitchen context 有效对于 befan 水是无效的啊好那下面我们去演示一下啊 啊我把这个去掉吧就这个刚才是演示的啊就你是用完之后咱得擦个屁股对不对。 呃行啊都恢复了啊我在这个地方我加个什么 v z e net 行吧。哎加个处加个处啊然后回到测试这个位置。哎呦这个有点多有点多。 去掉剩一个吧剩一个啊那现在我打开断点啊打开断点,然后呢?我通过什么方式去看呢?在这个然后 survey 当中,我是不是有个构造吧?有个构造,构造出一句话,这句话一执行是不代表这个病是不是创建的吧?哎,如果你没配它, 我先把它去掉啊,没配他,然后现在你回到这,然后断点执行。 好,我们看啊,我们先回到控制台,先不看断点啊,然后往下走一步,你发现是不是被创建的?所以这个容器一创建,是不是那个,那个 user service 是不是就被创建的吧? 好,把它跑掉,短点跑过去。那现在呢?我再把这个 v z e net 这一处加上啊,加上之后回到这,我再去跑 好控制台,下一步你发现什么?有没有打印?没有打印是没有打印吧?那我再回到 d bug 这个地方,我再看一下这个单例池当中, 哎,有没有这个 u 的 survice? 哎,这一堆啊,这一坨是吧?啊?刚肯定没有,因为他没创建,怎么放是吧?好,再往下走下一步看看。下一步我再回到控制,又切掉控制台,又切掉控制台啊,再往下一步, 有没有创建 cpus? 已经创建的吗?好,别着急,我再去到 debug 这个地方,我们再看一下这个,哎,已经有了,就 singleton of this, 你看是不是已经有了?已经存进去了,那就完事了。这这这,这能懂吗? 他跟我们那个 prota 排面 protab 是一直不会往当立尺放,因为他有多个用完就用完,就就就就就销毁了,是吧?那我们这个 延迟加载就是说我先不创建是吧?呃,你什么时候 get beat 时我再帮你创建,创建完毕,我仍然给你放到池子当中,后期谁用呢?谁再从池子当中直接去获取这个 usb 设备就完事了, ok 不?哎,这是关于我们这个延迟下载,哎,相对比较简单啊。

好,那我们继续啊。下面我们看一下在嗯并的基本配这个地方。最后一个知识点关于 sbring 的其他配置标签。那首先呢,我们要分清 sbring 的标签呢,它其实分为两大种, 第一种呢,我们把称为默认标签。第二种呢,我们把称为自定义标签是吧?那什么叫默认标签呢?就是不用额外导入其他命名空间的标签,我们把它叫做默认标签啊,一般其实就是我们的并标签啊,以并标签为代表的,然后那些标签就前面不用加前缀去引用。那还有一种呢,是自定义标签, 最近标签呢,就需要引入其他命名空间的啊,其他命名空间的约束。然后呢,在引用了这个命名空间内部的这个标签时呢,我需要通过前缀去引用啊,就这种形式。下面呢,我们具体去看一下我们这个配置文件啊。首先呢,我们看上面这个就是我们引入的约束头 对不对?哎,这一个你会发现是不是叫叉描 ns 是吧,叉描不用说。然后 ns 其实就是 name space 啊,一个简写啊,带这个东西是吧,这个叫 name name space 呢,对应的一个,你看这个叫地址呢啊,一个名字, 然后他没有冒号什么什么东西是吧,啊,所以这些就是默认的命名空间啊,我们先知道,然后这个在引入,因为之前我们应该学过 rose gamer 的引入是吧,所以在这我不过多去细讲啊。简单说一下,就是说这是命名空间。 然后呢,你还要引入这个 skimmer ocation 代表这个 skimmer 到底在哪啊,就具体那个文件在哪是吧,那具体文件在哪?对应引入的时候呢?他那个然后书写的规范是先写命空间,然后后边有空格,然后再写对应的那个 skimmer 地址啊,叉 s d 的那个地址。那那个地址呢?一般情况下, 现在都是一个虚拟地址。就是你看貌似看是个网址对吧。他其实对应的是映射到我本地的啊。某些炸包当中的那个 steam 文件到底在哪啊。大概就是这规范吧。这个然后不用过多去说。那如果现在他内部就是这个密码空间内部维护的这个标签啊,我们都把它称为 默认标签,你可以看一下,其实就是跟币相关的对吧。那如果也有其他标签呢?比如说啊,比如说我在这呃,把它上面 copy 一份。哎,不是这么 copy 呢,是这么 copy 啊。 copy 我放下边吧,放到这啊,走是吧。然后呢,也报错呢,因为重复的嘛。加个冒号,后边加什么?加一后缀啊,后缀。但这个后缀是一会我在使用标签时,那个标签是前缀。然后比如叫 context 行吧。那最后后边也得改 context 是不是你这么拍没用,你下边这个地方也得跟着拍啊。再 copy 一套。 哎,扔这扔这之后呢,我们也需要改,把对应的这个 beat 都改成 context。 下面一样,这个 beat 改成 context。 当然这规范的是去找那个地址啊。但找地址多麻烦啊。我现在直接把它然后弄过去,按照这个规则改成我们需要的那个, 这命名空间那个桥坠是不就 ok 了吧。那选中呢?你要想引入这个 contex 内部的这个标签,就用它的标签。我们要干嘛呢?我们 需要使用你给定这个前缀,比如说在这,在这边哎,我写个叫 context, 你会发现是不是有提示的吧,是吧? context 冒号。比如说 combining skin 啊, property, 然后 procuss holder 是吧?这个代表就是。比如说用这个 是吧,这代表就是引入哪个空间哎,这个空间内部的标签,明白吧?所以这个前缀的作用就在于我得区分到底是哪个命名空间呢啊。当然你这个地方原则上你要写个 a b c 呢,你这个地方是不是写 a b c 是吧?原则上是不是这么写,但是肯定不会这么干嘛,对吧?我们不会这么干啊。一般人家,人家这个前缀都是约定俗成的啊,叫什么都是固定的,所以你就按照标准去叫就完事了。所以说他内部然后维护的那些标签,我们都把 叫什么都把它叫做,然后自定义标签啊,自定义标签与这个然后默认的情况下,这个 bs 引入这个标签内部的,然后维护的标签呢,我们就把它叫做默认标签啊。这是关于默认标签自定义标签这概念应该没问题吧。那我们再看下默认标签呢。嗯,其实啊,我们就这四种 啊,就是四种,第一个叫 bins 啊,第二个叫 bin, 第三个叫 import, 第四个叫 ears 啊。首先看第一个 bins, 它的作用是一般作为插苗配置的根标签是吧?你比如说在这个地方,我们根标签是比较 beats 吧啊,其实这个 beats 内部还能再套 beats 是吧?它代表什么?代表你可以认为是叫整套环境的。 比如我这有有一套 beats 是吧?那下面呢,可能还一套 beats, 还套 beats, 这个相当是两套配置,当你这些指标签都需要存在,哪就需要存在某一套 beats。 下面 这就没了吧,我给指定到底是用这套 beat 的配置啊,还是用这套 beat 的配置啊,对吧?当然这个 beat 这个我命的比较少呢。啊,我先把它去掉吧。 好,这是关于我们的 bis 标签是吧?还有就是我们的并标签,并标签,大家看到我们是不是刚才之前的配置都在学并标签对吧?并标签会占到我们配置的百分之 啊,可能九十九以上是吧。 ok, 这个就不过去阐述呢,因为它的这个并标签这些细节我们已经都讲过呢啊,一些配置的一些属性我们基本都说过呢。那再往下走就是 input 标签啊。 input 标签它主要是用于导 导入外部资源的啊,导入外部资源啊,什么意思啊?因为你的配置文件可能有多个,但你最终的主配置文件可能有一个。我在主配置文件当中肯定要导入其他一些,然后小的其他配置文件,我会用一个 pro 导入到主配置文件当中。 那最终呢?我在这个 speed 容器在加载文件的时候,我只加载配置主配置文件就 ok 啊。这 import 的最后一个呢,就是我们的。嗯, get s 啊。这是干什么的?定义编名的 啊。电影编码。其实我们在配单个并的时候,这个并我们当时是不是学过,可以通过内秒指定编码吧,哎,你也可以通过这个呃 ears 额外的,然后去指定编码, 明白吧,哎,你看到底是谁,然后边边到底是什么,一会我再给大家演示啊。行吧,这是关于我们这个死不定的一些这个这个默认的标签啊,大概就这些死不定。然后底层呢,在解析的时候,他会区分你到底是 啊默认命名空间的啊,还是要自定命名空间的。那如果是默认命名空间的好,他再去区分你到底是 b, s 是 b, 是 input, 是 nas, 再区分这四个,然后标签是哪个不同的标签呢?对应有不同的解析方案啊,这个大家应该知道是吧?那如果你是这个 呃自定的命命名空间呢?就是你是引入的,是外部的,这些不是这个默认的。那 ok, 那就他是又有一套其他的机制啊,去解析我们这个自定命名空间的标签。当这个机制我们后期会给大家讲。 ok?

好,那下面继续啊,那下边我就把这几个默的标签啊,挨个给大家演示一下啊。首先我们看第一个 beats 标签啊,还说 beats 标签呢,它其实, 嗯刨出做根标签之外啊,他开还可以,然后做区分环境的用处啊,就是通过他对应的一个属性叫 profile 啊,主要我们其实这个 beats 用的时候就用这个 profile 属性,可以让他去区分封装不同的环境啊,那下面呢,我们给大家演示一下啊。 啊,当然这些呢,我把这些没用的先把它干掉啊,别影响我的测试。嗯,这个先不用吧。好,那比如在这啊,在这我定一个 this 对吧?这个 beat 呢?通过 profile 然后去指定一个名字,就这个环境的名称啊,比如我就 叫第一位开发环境,行吧,开发环境,然后内部呢去配个并 是吧?配个并,那这个并呢?然后当然。嗯,你可以给个 id 吧,这个 id 我叫 user service。 哎,你不能重名 s e r v s e 啊,不能跟下边重名是吧?叫 user service 一 对吧。下边 user service 嘛,然后对应它的这个权限的名 com 点 it 黑马,点 service, 点 i m p l 点 user service 安票, 可以吧?哎,这就行了是吧?那然后呢,我再去配置一个开发环境啊。测试环境,这是开发环境是吧?测试环境 test, 比如这个地方我们配个 user 丢吧丢一对吧,它对应的就是我们的丢层,丢层下边的这按 p r 点它 可以吧。哎,这是报错呢是吧?为什么报错呢?放这说什么说 surveys ambit, bins one of 啊。 bins is expected 是吧,意味着我是不是就需要一个 bins 是吧,你这要多个是不行的哎,稍等哦。把它呢 剪切一下放这,你还报错吗?是,是不是不报错了?哎,不报错了,他有个稍微有个顺序问题是吧?好,那现在,然后你写完之后呢,才发现你这地方现在应该是 more 有三个环境是吧?第一个环境就是我们的 末日环境,就这个地方是吧?第二个呢,就是我们这个 d v 环境第三个就是 test 环境是吧?呃,这些 beat 是不没有在任何环境下是吧?啊,没有在任何环境下啊。好,现在我去测试。我怎么去测呢?首先你要指定环境, 你看我现在有 service 有 d u 对不对?你回到这个地方我这么干啊,我再 copy 一个叫 user d u d u user d o。 行吧,我现在是没有指定任何环境嘛。没有指定任何环境他就找的谁啊?找的就是就是末日环境,明白吧?诶,末日环境,然后你直行走 是不是都能打印?哎,我现在我想去找谁呢?我现在想去找 user service 一跟 user deal 一。 user service 在哪呢? user service 是不是在第一位环境下的吧,而 user deal 一呢,是不是在太子环境下吧?哎,我看能不能找到呢?哎,我们在这儿去执行。 哎,报错呢?报什么错呢?是不是 usb 找不到吧?哎,找不到。那你想找这个环境怎么办呢?你得为他去先指定环境。 那怎么去指定环境呢?好,我们 ppt 我们写呢,就是通过两种方式,第一种方式我们使用虚拟机参数的方式,就在运行期间啊,我给加个然后杠 dspring perfill 四点 active test 就指应个 test 环境或指定 tv 环境。第二种方式就是你设置它的环境面料就通过,然后代码形式,所以 set properties, 我们写第二种吧,第二种稍微简单一点啊。好,你在这个地方,在这儿指定环境啊,就是 system 点 set property。 哎,这个名字还挺长,叫 spring, 点儿 feel 四啊,点 active active 是不是叫激活的?激活的意思是吧?比如现在我去激活哪个环境呢?我去激活啊, dv 环境, 对吧?大家知道 d v 环境有谁? d v 环境是不是有 usb 是吧?但是没有 d o 嘛,对吧?好,现在我把这个 d o 先注脚 助教,然后执行,你看现在能不能获取到是,是不是能获取到吧。没有报错,然后你把它打开呢? 打开是不是得报错呢?报什么呀?是不是报找不到 user service, user d o e 吧,你看说没有一个 user d o 的东, d o e 的东西 是吧?那如果你把它改成 test 呢? t s t test, 哎, t e s t 直行, 它是不 service 就找不到了嘛。但 d o 能不能找? d o 是能找到的啊,当然因为这个地方先报错呢,是吧?获取不到我就把它注掉。那你现在看 test 这个环境下是不是有 d o user d o e 吧。那现在我找 user d o e 是不肯定能找到 看到了吗?啊?所以说你在开发室,有的时候啊,有的时候你可能需要去 区分你的开发环境还是测试环境,那这个时候呢,你就可以把开发环境用到的病配到这啊。在测试环境用到病配到这, 是不是然后呢?你虽然配的然后比较多,你可以在运行期间,是吧?在运行的时候要指定环境面料或者代码当中去写。你到底用哪套环境 啊?这个呢?后期你在学 smart 部的时候,可能后期项目当中还需要去切换环境,那所以这个然后你稍微哎知道一下啊?那么这是关于我们这个 beas, 然后最主要的一个 profile, 一个属性的应用。

好,那我们继续啊,刚才呢,我们已经用这个构造方法啊,去可以配置我们的这个病,是吧?不管是有餐的还是午餐的,它本质都是我们的构造方法。那刨除这个构造方法之外呢,我们说还有一种就是工厂方式去使用,这话我们的病 啊,那么看一下工厂方式,工厂方式呢,在这我又给大家归结为三种啊,第一种叫共态静态工厂方法, 第二种呢叫实力工厂方法。第三种呢啊,实现我们的这个发翠病的方式,那第三种啊,在这我一句话半句话说不明白,但第一种第二种啊,可以稍微然后介绍一下啊,静态工厂方法说白就是说什么?就是我定一个工厂, 哎,我定一工厂就自定一个工厂,那这个工厂内部呢?提供静态方法,在这个静态方法内部呢,我就产生一个病啊,最后这个病呢,哎,我要交给死不认容器,然后去帮我管理, ok, 那第二种呢,神秘工厂方法呢啊,其实相对静态,就是说我有个工厂这工厂内部的方法呢,是非静态的 啊,那那最终这个非静态方法然后产生的病呢?就是法规值啊,最终我交给死亡容器,然后去管理啊, 他们其实最主要的区别是在于什么呢?在于静态工厂方法,他是不是方法是静态的啊?非静态工厂方法啊,他的这个这个方法是非静态的,所以我们在配置时候我们要知道静态工厂方法他在产生,这个就是在调用他静态方法时,我这个工厂静态工厂他不需要现有对象, 对吧?用静态方法直接然后这个内名去调静态方法就 ok, 但实力功能方法就不一样的。你这个,然后实力工厂必须需要工厂对象,然后再说用工厂对象去调,就用那方法啊,这是他一个最主要的 区别。行吧,那下面你就配一个吧,咱们配一个啊。呃,我们回到 id 当中。呃,首先在这呢,我再借一个 package 啊,就叫 factory 吧,叫 factory。 好,在这个内部呢,我去创建一个,就叫, 叫塞这个吧啊,叫塞这个,然后这个这吧,别叫塞这个呢,我叫 bean, 叫 mary be factory factory 是吧,哎,一可以吧迈并 factory 一好。创建好之后呢,内部我们提供一个静态方法就行, 塞这个反位值呢?你随便,我们就反个 do 吧。好吧, uzdao 啊,就叫 uzdao 啊。最终我在这 rat 一个 new 一个。 是不是写完的吧,写完之后,现在,然后我们去产生 b。 原先是怎么产生的?就原先是不是使用容器,他通过这个权限的名 就是那个全包明啊。反射创建好对象放到容器当中,是吧?而现在呢,是我们的 siri 这个容器帮你去掉这个 a 的这个静态方法,最终将返回的这个对象存储到 spring 容器当中啊,是一个过程吧。好,那下面呢,我们主要在于怎么去配是吧?怎么去配?右键敲皮他的权限的名回到我们的配置文件当中, 哎,在这, 哎,你原先怎么配,现在你还怎么配? 比如原先我们是不是先配个这个这个这个 id 边我叫叫什么呀?叫尤泽 dld。 行吧,就用全线,里面是他他。那如果你这样配完之后,这个原先我配个普通的丢是不一样的,是吧,当你起重时,那死不定容器会干什么事呢? 会按照你的全限你名给你创建。创建对象就实拍对象吗?这个就走的是无端构造对不对?然后呢,创建完对象就是放到容器当中,那放到容器当中是不是这个并的有个并内幕呀?那此时的并内幕是不是叫 idu 在 d o e 对不对? ok, 但,但是呢,现在我是想找他的方法,所以说在这个地方你加什么呀?加个叫 factory measured。 指定他的那个方法啊,我的方法是不是就叫优字第优这个方法吧,是吧,哎, 所以说你在这就指定这个方法叫优则第优。那此时当你这样拍完之后,此被容器当看到时,哎,在在这个解析时,哦,发现哦,牛哥 faculty 没事的。那我知道呢,不是把他变成对象, 是找他内部的这个优字。丢这个方法,把这个方法的返回值啊,当做这个对象,再以你指定的 id 作为并内幕存储到容器当中, 这能明白吧。好,下面我们测试一下啊,先保证我的测试是没有问题的啊,这些代码我先干掉吧。有容器呢 盖的被子。我叫你什么名字?你猜。呸,你叫什么名字?是不是叫优字地优一对不对啊,在这优字地优一行吧。那就不强转的,不强转的我在这优字地。 我打一下地址就行。直行。 哎,稍等, 你看是没有问题。看看,别看第一个,第一个是我们的构造答案,那个 siris 构造答案的话啊,是不 u 字丢,最终我答应没有问题,是不是能创建吧。好,能创建,那其实在这个地方呢,我可以再加个断点走,往下走一步, 我们看谁啊?我们看那个,就是那个,当地时,对不对?在这有 bifac 又找不到了,他下边有个叫 best, 这呢,然后进去,然后有新勾他奥布这个斯啊,不是这个吧?哎。点进去,然后再点,你找是不是他有个优字地优一,是不?优字地优一吧,哎,优字地优一,你再点进去,发现这个优字地优一 是不就是 uzdui 瓢这对象对不对?哎,他对象是这个对象,并不是这个工厂对象啊,因为我这种配置此阵容器是能识别的, ok, 这点能听懂吧?大家回到这说,这种方有什么用呢?这么麻烦是不是? 那叫什么用啊? 大家想想啊,想想啊。第一个用处在于原先你在去呃,自己去创建这个病,让死病人去管,给的话,那你这个病在创建前后你是没有办法去执行其他代码的, 就是这个病,我说马上要创建呢,是吧?创建之前我想干点事,原先你不好干,但通过这种工厂方式那就 ok 了。比如在这个地方加个注视,就是说这个 并创建之前之前我可以让进行一些奇葩的音博技操作, 对不对?那在创建之后呢,是不是也可以进行一些其他业务规矩操作,比如把他踢到外边是吧?然后执行完之后最终再把他返回,这能明白吧?所以你 这个这个逻辑可以更加灵活一点。这是这是第一个,是吧?那第二个原因呢?大家想想,你看啊,还是说我们这些是不都是我自定义的吧? 啊?就是这个别翻水也好啊,这个优在第二安片好,是不是都是自定义的,是吧?啊?大家在想,其实有一些啊,有一些病是非我自定义的,就什么意思?人家炸包已经给你定义好的, 就其他诈包啊,给你定义好的,比如说你在开发时,你不可能都是自己定义的吧?你是不可能要有一些工具啊,或者有一些,然后第三方的一些诈包啊,对不对?那如果第三方诈包当中的,哎,某些病你也需要交给死不认去管是吧?你是不是得配置? 可能有时候这个病本身他就不是着通过有仓构造,无仓构造去生成的,是吧?他可能就是通过某些静态方法产生的,而那些病在配置时你就可以用这种什么呀?这种 静态构造就是静态工厂的方式把它配到四倍容器当中啊。打个比方,比如说大家知道我们这个什么呢? 啊?我在这写一个啊,大家知道我们当时在开发是我们的 ggbc 是吧? ggbc, gtbc, 是不是那个可耐神怎么去获取的 draw money? 这耽误我这没倒包啊,就 draw money 这点儿是不是有点可单身 条纹是吧?可耐克神,然后就尾代码呢?因为这没倒包,所有都爆红的是吧?哎,大家想,哎,就这就这个方法对吧?那比如说他这种的反折势必可耐克神 是不是可男神?那如果现在我想让死别人,哎,帮我去管可男神,那可男神怎么去产生呢?是不是通过然后一个内的一个方法最终产生的可男神呢?对吧?那此时我是不是就可以把它看成是一个静态工厂方法产生可男神? 但这种方式不会这么配啊,你不要讲着回去,真啊傻呵呵的咔咔的把那个可难事要配到容易当中,用这种方式是吧? 我就跟他打个比方,我现在暂时想不出来其他的呢,是吧?就是说有很多人非我最近的病,他的然后产生,确实是通过然后这种静态方法产生的。那此时我就可以用。哎,刚才学的这种什么呀?哎,静态工厂的方式进行配置啊。 好吧,那就是关于静态工厂方式配置我们的便啊。

我们来看 supreme 中 unable catching 这个注解,如何集成我们的 radis。 好,我们先看一下对应的流程啊, 第一步我们要引入连接我们 redis 的架包,也就是这里面就包含了对 redis 的一些操作啊,这是第一步。然后第二步就是要去创建我们 redis 的一个配置文件啊, 比如说要连接 redis 里面的哪一个库,然后还有对应的一些属性啊,等会会去做详细的介绍。然后第三个的话就是要去创建我们 redis 相关的病啊,主要是通过啊注解的这种形式 去创建我们开启 manager, 就是对我们的这个缓存进行管理的一个类啊,然后 最后一步是什么呢?就是创建我们的服务类,然后这个服务类就是把我们数据库中的数据存储到缓存中啊,然后使用到的注解就是这个开启 abo 这个注解啊,然后最后就对我们的代码进行一个测试。 好,那我们先看第一步啊,就是引入我们 redis 的客户端的一个价包。好,在这里。 好,这个啊,我们用的是这一个 radish, 这个家包好,把它引入进来之后,我们就可以对我们的 radis 进行一个操作。 好哈,这里有一个版本号,版本号我是维护到我们的副工程里面的啊,对的,是这个三点一,九点三啊,好, 然后第二步要做什么?第二步就是去配置我们 red 式的配置文件,对吧?这里有两个啊,两个配置文件。好,我们看一下 resource obligation 雅妙,这里就是去配置对应的 ip, 还有我们的端口,对吧?然后这个是对应的是 redison, 它对应的一些啊属性配置啊,就全部配置到这个配置文件里面啊,我们看一下, 看,这里面有对应的啊,数据库,对吧?你使用哪一个数据库?还有其他的一些连接参数啊?比如说我们的连接超时,还有连接时的一些大小,对吧? 好,我们 redis 里面它默认的数据库一共有十六个啊,就是从零到十五。好,那我们配置文件配置好之后,我们再看下一步,下一步就是去创建这一个开启 mini 角,对不对?好, 开启 manager configure, release configure 啊,然后这里要加上我们的注解 component, 然后还要加上一个开启我们缓存的一个注解啊,然后这里注入我们操作 ladies 的一个客户端啊。好,然后最后就是创建我们的 catch manager, 看到没有啊?就通过这个客户端去创建我们的 catch manager, 然后再往这个 catch manager 里面啊去设置一个缓存的名称,也就是我们懂火的数据就是存放到这个缓存里面的啊。 好,那接下来呢,是不是要去创建一个服务类,然后这个服务类就是把我们数据库中的数据啊,查询出来的数据,把它放放到我们的这个缓存中, 对应的这个注解就是这个开启 a 吧。好,我们看我们的服务类 这里啊,通过这个 catch app 这个注解,然后这里面对应的就是我们 catch manager 的名称,对不对啊?就是我们在创建 catch manager 的时候指定的这个名称,然后这里面对应的就是我们的 key 啊 t, 然后 t 我的组成是什么呢?当前类名加上当前的这个方法名啊, 然后我这里是模拟了从数据库查询出来的数据啊,然后存放了三张票啊,然后查询出来之后,这个方法里面的数据他就会放到这里面来啊,放到我们的开心慢六角。好,那最后一步是什么?最后一步我们就写一个测试代码啊。好, 我们看一下我们的测试代码。 好,在这里啊,就是直接去调用啊,调用他。好,我们先看一下缓存里面啊,缓存里面看现在是没有数据的,对不对? 那么直接 run 执行之后,我们再到缓存里面去查对应的数据啊, 好,我们可以看到啊,这个地方应该是已经执行成功了,对不对?那我们就直接到缓存里面去查取啊,对应的数据我们是根据什么来查呢?根据这个 i depend catch。 好,检索一下看到没有,对吧?这个就是我们刚存的数据啊, 看这里门票,儿童票、节假日票,还有我们的成人票,对不对?然后这个 k 对应的是什么呢? k 对应的就是当前这个类名,加上我们的方法名, 对吧?然后这一个 itben catch, 这个就是我们的 catch manager, 对不对?缓存的名称。好,那这个就是用我们的 supreme 的注解啊,集成 redis。

好到这,这个第一个默认标签,必死标签啊,常用的这个 profile 属性切换环境,然后给大家就说呢,是吧?啊,在这还需要注意一点啊,就是说你这么记啊,这么记比较简单,就是说,呃,你现在不是有多套环境吗?对吧? 当你在开发时指定某环境的,比如说我通过这种方式,或通过然后这个启动时虚拟参数的方式指定,比如说第一微环境,那第一微环境内部的就生效,但是非第一微环境内部的,然后其他 beats 当中的这个必标签就不生效,可是外边这些也生效, 就是比如说啊,我指定第一微,那这个生不生效?生效,这些生不生效也生效,因为它属于公共的部分,明白吧?那当你只用 test, 然后这个这个环境呢?啊,这个然后生不生效,就是第一 uzdo 一生不生效。生效,然后它生效吗?啊?不生效,但是对于外边这些公共的部分生效吗?也生效,但是对你,对你如果哪个环境都没有指定,哎,只有公共的部分生效,那这些就都不生效, 能明白因为你没有指定环境吗?这些是不都不生效啊,都不会被加载啊。 ok, 各位,这个行吧,那回到 b b t 我们接着往下说。 呃,关于这个 import 的标签, import 的导入其他这个配置文件的标签,当然这个并标签我们在这不再过多阐述呢,因为刚才说过我们之前讲的, 因为这个病标签比较重要吗?是吧?比较主要,然后前面讲的一些属性都是围绕并去讲的,所以那个我就不再去讲了。那下面说一下这个 input 啊, input 主要用于导入其他配置文件啊,那当你项目变大之后,或者说你这个项目阳 严格遵守羽,羽翼化,什么叫羽翼化?就是说每个模块,我们要求每个模块有一个配置文件,那这样的话就导致然后配置文件非常多,但是最终你,你知道你在进行这个最终创建容器的时候,是吧?啊?你是不是要加载一个配置文件? 当然我说一下,你在这创建容器时可以加载多个配置文件啊,但你这样太麻烦了,所以说我们往往会把一些琐碎的、小的一些配置文件,把它加载到一个主配置文件当中,我在这在创建容器容器时只加载主配置文件就 ok, 明白吧?那你在主配置文件怎么去引入其他那些小的配置文件呢?我们通过就是 input, 哎,跑哪去了? 哎,我们通过就是这个 input 啊,咱也打个比方啊,打个比方说一下用场景啊,我把这些然后就都删除掉啊,删除掉,在这把 其他环境我把它删除掉啊。好,那比如说现在开发呢啊,在开发,我这个项目非常大,项目非常大呢,我的配置文件就非常多,对吧?配置文件非常非常多,我的主配置文件呢? spring 的主配置文件就叫 art vacation context 就叫它, 然后与此同时呢,我规定每个模块都有属于自己的配置文件,所以在这我就创建一个,比如有 u 字,是吧? case in contacts, 比如说这个横杠 user 模块啊,它这个配置文件, 那么内部就不配东西了啊,比如说呢,我再去创建一个,它是 copy 吧走,就还有其他的,比如我们的这个订单 orders, 对吧?哎,等等,有有有,这么多配置文件是吧? 那他那不是别的配东西吧啊,但是我这就不配呢,就配很多东西,最终我在执行时,我是不是加载一个主配置文件,对吧?你加载主配置文件不行啊,你这些文件没被加载进去啊, 对吧?那主配置文件要不要去加载这些小配置文件就分的配置文件模,其他模块配置文件是不可以吧?所以在这个内部你就通过什么呀?哎,我就通过 import 啊,去引入其他模块儿配准键,一个都不对呀。其他模块儿的配准键 是吧?你就 import 吧, i am pure import 应该是不是 resource 啊?那文件在哪呢?是不是在那一家子路灯下啊?所以说可 pass pass 啊,后边写谁呢? 就显示叫 upper。 你是不是有提示啊?有提示引个 user 的啊, copy 一个,再引个 orders 的, 明白不啊?这儿就 ok 了。你比如说啊,我这儿注掉,对吧?注掉,注掉之后呢?我在主配置文件已经没有 service 跟 do 呢啊,我把这个 service 啊,我扔到 order 这儿, 行吧,然后把那个那个那那个 do 呢?丢 d a o copy, 我扔到这个 you 在这能看懂吧?那如果在测试时仍然能获取到我的 service 跟 do, 那说明什么?说明是不是那个这两个小的配置文件已经帮我加载到这个主配置文件 当中的吧?真的明白不?因为它内部是不有电油是吧?因为这个 odors 内部是不是有 service 配置?好,那现在我就测试,我打开吧。 啊,没问题,好执行,你看是没问题,能明白吧?那如果现在在 users user 当中把这个 do 给注掉,注掉了吧?注掉了,哎,注掉之后呢,我再去测试, 那肯定报错呢,谁找不着,是不是 do 找不着呢? no name the user d o 好, vangable 这下明白吧。哎,这是关于 import 啊,它在配置文件的这地方一个引用啊。



好,那我们接着啊,刚才呢,我们去给大家讲的这个静态工厂方式跟非静态工厂方法方式是吧?那不管是哪种方式呢?我们你看用的都是这种,就说这个方法的参数 啊,都是没有的,你看我们这个静态工厂方法也是没有参数的,那非静态工厂方法也是没有参数的,我指的不是这构造啊,这构造的参数好说,直接扔个人进去不不就完事了,是吧? 但是我们如果这个,呃,这个方法就是这个静态工厂方法跟非静态工厂方法,如果他有参数的话,我怎么去配置?打个比方啊,比如说我这个, 我这个地方呢,有个 stray 文 name 行不行?有个 inter 型的,有个 age 可以吧?那这种方式在配的时候怎么去配呢 啊?你看啊,回到这啊,我们找到这是几啊?这是一是吧?一,这个 use 的丢这个方法是吧?有个 name, 有个 age 是吧?咱们去配, 你看这是不是报错了吧,一,这个位置啊,哎,往这拽一点就报错了是吧?因为他已经检测出了吗?这个 id 还是比较高级的,是吧?他能检测出你有有有参数,但你这没个参数是吧? 用什么去指有用什么把这个参数绕去填充给他呢?在这配置的时候同样用 construct 加 a r g 啊,怎么写?你就看对应的名字是什么,是不是一个 name, 一个 age 吧。哎,所以在这 内幕啊,纸你随便写呢,对吧?再 copy 一个,这个叫 age 就十八岁, 行吧。那现在呢,你再去执行的话啊,肯定没什么问题,比如我现在是一,对不对,我现在是一,这不是一吗? uzdo 一是吧?你执行? 哎,这没啥说的,稍等把刚才那个断点没过去再执行。哎,这没什么说的,是吧?那如果现在是二呢? 现在如果把它改成二,现在获取二啊,二现在是没有参数,如果想让他有参数的话,我说这个地方啊,比如也搞个 street user name 行不行?哎,这个 string user name, 那你这配置是不也报错了嘛?是不也得加什么?也得加参数? construct a i g, 然后 name 等于 user name, 然后值。还是说随便, 行吧,当你这是,这是个双标签吗?双标签,那如果中间没有标签体,你可以当标签的方式啊,当时写完了就就就这种方式,对吧?这个你再测试的话, 把它改成二是不就行,然后测试一下执行。那只要正常构建对象没报错,那证明就没有问题啊。那这个我想说明什么呢?说明回到这,这个 ctrl aig, 它这个作用其实我们之前已经说过的,是吧?那现在你看啊,我现在去找这个 user 地欧方法 啊,这个二是吧?二的 user d o 方法。那这个 d o 方法,我问大家, user 丢这个方法,它是构造方法吗? 是构造函数吗?它不是构造函数,这是构造函数,是吧?但是这个方法是不是帮我去构造并的那个方法? 你看它这个方法内部是不是最终反映一个是不是并,所以它是构造并的这个方法,但它并不是构造函数, 对吧?只只要你是构造,就只要你是最终产生病的,这个方法内部需要的参数我是不是都可以通过什么呀?这个 construct a g, 然后给你传递。这个我们之前说过,是吧?在这我再给大,再给大家再等于再复现一下这个问题, 明白吧?一,也是啊,一,这个方法是不是最终是产生这个有点丢这个对象的这个方法?哎?只要是产生对象的这个方法内部需要的参数, 在什么样的配置当中我都可以用 construct a r g, 所以这个地方 construct 啊,它并不代并不代表的叫构造函数,对吧?它 他代表叫构造参数,你要知道这个构造是构造什么,是构造那个并的方法的参数,这些是不都叫构造并的方,就构造这个并的这个方法参数, 是吧?这个方法是不是构造病的?是不是?那这个然后方法是不是也是产生病的,也是构造出这个病的?哎,只要他们的这个这个方法的参数要想传递的话,在配置时都可以用 constructor 添加剂 啊,这点我就说明白了啊,跟之前我跟大家说的那个,然后等于是就呼应的,是吧?那这个点大家要记一下啊,这个后期,然后你在嗯,项目的课程当中,或在项目开发时,我们可能会用到这种配置方式啊。

好,那我们看第五个啊,关于这个病的出水化方法和销毁方法的一个配置。啊,那这是什么意思呢?就是说病在创建对象之后啊啊,他可以完成一些基本的出水化操作, 那我们可以在配置的时候呢,指定这个出手化方法是谁?同样我们在销毁的时候呢,也能指定这个销毁的方法是谁。好,那下面呢,我们就回到代码去配一个啊。嗯, 切到 id 当中啊,这个比较简单,首先呢你需要在你的这,比如说 you 的 cv 子吧。啊,在这个地方我需要指定一个触手法方法给一个销毁方法。好,我就在上面写吧。 呃, vid, 呃,一逆场,大家这个名字叫什么都无所谓,一会指定时要指定这个名字的。啊。好,在这呢,我打,我就简单打一句话吧,说这个是我们这个初始画方法。 好吧,那我再考比分,然后呢与此同时呢?然后给他一个销毁 给帅是吧?呃,写错了,给帅方法,那这个叫销毁方法。 哎,那配置完之后呢?他其实在我这个病当中啊,他就是一个普通方法啊,就是个普通方法。那现在我要想把它定义成一个处处化方法,把它定义成一个销毁方法是吧?那处置化方法是不是跟销毁方法本身是死不定,得帮你吊用对不对?你得告诉他是吧?你怎么告诉他呢? 还要通过我们的配置文件去配置啊,这没问题,对不对?那回到配置文件当中。哎,在这个地方当这个杯子一逆他,我就把它去掉了啊,在这呢,然后他有个叫一逆他 messer 的啊,指定哪个 方法?看有提示是不是盈利。他那如果你在你的配置的时候,就是你在编写时,这个地方叫 aaa, 当然你的配置时他提示就是 aaa, 对吧?好,这是个 dcr 呢,哎,他有个叫 dcray master 的啊,我们是我们的 dcra。 方法 好,当你这样写完之后呢?那待你执行再执行的时候,我们可以看一下啊, 看控制台打印,稍等啊。哎,首先呢是我们这个并对象创建,创建完毕之后呢,他帮你自动去调用这个触手法方法,这听明白吧?所以说在这有一点大家知道啊,就是说以逆的方法啊,跟我们这个构造方法啊领先执行, 哪个先执行啊?那必然是构造方法先执行啊,因为构造方法执行代表是个对象创建是吧?而这个处理方法是对象 创建完毕之后啊, spa 帮你执行的啊,一个方法啊,这个意思,但是,哎,又有问题呢,为什么我们迪斯帅方法没有直就没有执行呢?哎,我执行完毕呢?为什么迪斯帅没有执行啊? 你看我们代码啊,回到这个地方,回到这个地方,哎,我执行一一句是吧?哎,盖的被盖的被完事之后呢?然后最终打印打完毕,那就完事了。为什么呀?因为你没有显示的去关闭容器, 那这个就涉及,然后我这个就是容器当这个并什么时候销毁啊?就容器当时并末是不是当地的,对不对?他什么时候情况下销毁啊?其实当这个容器啊显示的,然后去关闭的时候显,什么叫显示关闭啊?哎,就是告诉他,哎,我这容器要关闭呢,那此时呢? 这个这个并所有并的这个销毁方法,如果你配置的话,他都会绕去执行,但是如果你不是显示的官名,啥意思?比如说我执行到这个地方,比如说我再打个断点,是吧?哎,我执行到这 直到之后呢?我点这个这个东西啊,这个东西,这东西干嘛?代表相当停电,对不对?趴一下停电。那现在这个容器知道自己要关吗?容器还不知道自己要关呢啊?所以说他根本就没有来得及帮你去调用对应的这个销毁方法,那就挂掉呢,是吧? 所以说在这呢我要干嘛?我要显示的把这个容器关一遍,关一下,是吧?怎么关呢?呃,现在这个代码没法关 啊。这个代码没啥关,因为这个接口内部没有关闭的方法,我们得用它的子内用它,用它,因为它内部具备关闭的方法,是吧?那这么去搞啊,在这个地方 我就走点六次关一下容器在关闭的时候,哎,发现,哎,我这容器要关闭呢,关闭之前,然后把我内部所有病的,对吧?只要配置这个消费方法呢,是不是都执行一遍就完事了? ok, 那现在你再执行,我就不用打断点了,我们直接看一下那个打印效果就完事了, ok 吧?哎,是不是消费方法执行的?行吧,这是关于我们这一个病,他的一个出入化方法,给个销毁方法这个配置,哎,也就是一个 innate mess 的,给个迪斯尔曼斯的,但是这个迪斯尔麦斯的基本 我们不会用隐匿的办事呢,有时偶尔还用一下,就是当这个病串串完毕之后,我可能要干什么事,我要把干的一些事的一些逻辑代码,我给写到这个隐匿的办事当中啊? ok。