00:00
好,我是北京。来,我们接着往后说啊,呃,那我们刚刚说的是我们病的生命周期啊,它的这五个阶段,这个研究明白以后呢,接下来我们再来给大家去说上一个B的后置处理器哈,这样的一个东西,它是干嘛的呢?注意B的后置处理器呢,它允许我们在初始化方法的前后对B对象进行额外的处理,什么意思啊。就是你可以啊,在你原本的这个生命周期的基基础之上啊,再去写上一个病的后置处理器,那么这个病的后置处理器呢,它就会在你这个初始化方法的前后,额外的再去进行一些操作。啊,那么他这个是怎么实现的呢?注意它就是通过一个接口,然后接口里面呢,声明的两个方法,这两个方法呢,它就会在特定的时机去执行啊,这就是我们的一个bin的后置处理器,那么我们需要实现的接口是谁呢?叫做bin post process啊就这样的一个接口,实现了这个接口以后呢,它里面有两个抽象方法是我们需要实现的,那么这两个方法的名字你一看就看到了,一个是before,一个是什么?After,一个是在初始化前,一个是在初始化后。
01:26
能明白了吧?来吧,接下来我们就来试一试这个东西啊好,那么首先呢,还是回到我们的开发工具中,我们找到我们的这个life cle,在life cle下面呢,我们去用一个class,我就叫做什么b post processor,那我就叫做MY,我自己写的是吧b post的process OK,那么这个的话,我们写的是一个bin的后置处理器啊,B的后置处理器啊,那么现在我首先给大家去解释一下啊,这个B的后置处理器它不是说只对单个的并器作用,而什么呀,对LC容器中,好容器中所有的病都起作用,听懂了吧?哎,不是说只对你单个的病起作用,它对所有的病都起作用,只要你把这个东西写上了,然后呢,它对所有的病的这个生命周期都会起作用,明白这个意思了吧,OK,好,那把这个我们来接着往后写怎么。
02:26
所以呢,我们需要让它去实现一个接口,实现什么接口呢?就叫做并post process,实现了这个接口以后,大家注意了啊,我来把它的抽象方法实现出来。OK,大家能看到这就是两个抽象方法,其中一个是after什么什么,一个是before什么什么,这个就是在初始化之前执行的,这个就是在初始化之后执行的啊,然后呢,他还带了两个参数,但是现在来看的话,其实这两个参数我也看不明白它到底是个啥,对吧?啊,所以说呢,我们为了能更加的看懂嘛,我们把这个先干掉,干掉以后呢,我先把这个呢,给它加上个原代码,你看它需要一个病S这个包吧,对不对,所以说呢,我把这个源码呢,先给它加一下,这样的话呢,我们就能看明白那个参数是一个什么意思了啊来beans。
03:22
OK,就是这个SS包啊,打开好加进来以后呢,你不用去看它的这个底层的东西啊,你直接再回到这一边去给它做一个实现,那我们就能看到已经不是那个2021了吧。对不对啊,这是一个小技巧啊,大家可以去学一学啊,然后呢,现在我们就能看一下,首先这个是在我们的初始化方法之前执行的好,在病的生命周期的初始化方法之前执行,OK,那么下面这个呢?下面是什么意思啊?
04:01
来都跟上哈,之后吧,之后诶这是我们的之后执前的,好,那么我们来看一下,呃,它这个里面呢,还帮我们传了两个参数进来,需要给大家解释一下,一个是object这类型的病,一个是什么呀?去类型的并name吗?哎,你说这是什么东西呀?这个并是谁呀?哦,这个类型这个并是谁?哎,注意这个并呢就是什么呀,正在被创建的啊并对象能清懂吧?哎,正在被创建的B对象,而这个be name呢,就是啊并对象的什么呀?名字嘛,并对象是谁呀?就是那个ID值谁呀,就是这里面你配置的病的这个ID就是它听懂了吧?OK,好,那么现在我们来研究一下哈,你看啊,我正常情况下生命周期呢,分成了五个阶段啊,这是第一个阶段,然后呢,这是我们的第。
05:02
第二个阶段,然后这是我的第三个阶段,第三个阶段是不是就是初始化的阶段呀,对不对,OK,你想第一步调用构造器,第二步呢,给S的方法调用S的方法赋值,那么其实这两步一完成,我们这个并对项该有的值什么的是不是都有了,对不对?然后接下来呢,我要进行初始化了,那么现在假如说你有了这个后置处理器以后,好,那么像before这个方法,就会在你初始化方法了之前,就在这个位置去执行我的before方法,然后呢,等你初始化完了以后呢,在这个方法之后就要去执行我的after这个方法了。能明白这个意思吗?哎,就要去执行它了,那么大家来想一下,这两个方法能干什么事啊?能做什么事?啊,那我们就要去分析一下它的什么执行时机了吧,哎,其实这个没有一个标准答案啊,需要给大家解释一下,呃,你说这两个方法能做什么事呢?那就得看你要具体完成什么业务了,对吧?啊说在这个编程里面的话,有了业务我们才会有什么呀?啊,应该是有了需求对吧,我们才会有业务,有了业务我才知道这里面要去写什么东西,就如果说你现在你也不知道你要做什么事,那这里面你肯定就不知道怎么去写了,对吧?OK,但是呢,我可以大概的去说一下啊,我们按照他这个执行时机呢,给大家去说一说啊,在这个方法之前,就在初始化之前的话呢,其实我们刚刚给对象的属性赋完值,那么其实你就可以在这个位置,你因为他已经把这个对象给你传进来了,你就可以简单的去做一些属性信息的一些校验,看看你负的这些值呢,合法不合法,对不对。
06:50
能明白吗?可以做一些这个属性信息的一些校验,听懂了吧,能理解什么意思吧?啊,你可以做一些简单的校验啊,然后呢啊,那如果说我这个方法是没有任何问题的啊,执行完了,那你再去接着执行你的初始化,初始化完了以后呢,我又要去执行我这个out方法了,那你说这里面我又能做啥了?哎,那我就看一下你初始化的正确不正确,对吧?你初始化里面肯定也是要去做一些操作的,那我就看看你这些操作做了正确不正确,满不满足我的这个要求是吧?所以现在因为我们没有具体的一个业务,也就意味着我没有办法去做出一些什么具体的实现来啊,那么现在大家要学会的就是你一定要知道他的这个执行时机是在什么地方,然后将来的话呢,就结合上你们自己具体的一个业务,再来在这个方法里面做出你具体的一个什么逻辑处理。
07:44
听懂了吧,所以说现在你先记住它的这个特性就可以了,好,那我们接着往后说啊,那既然你把这个对象传进来了,你在这个方法里面,你肯定要去用这个对象的,那么你用完这个对象,大家一定要注意再把对象给人家返回回去,你要说这个地方不把对象返回回去,那接下来去调用这个初始化方法的时候,这个对象就没有了,从现在开始,如果你不往回返回,后面的操作这个对象就都没有了。
08:15
明白吧,同样的道理,你在这个方法里面也是人家给你传进来了,那么你用完以后一定要给人家再返还回去。明白这个意思了吧,听懂了吧?OK,首先你看一下,既然诶后续的操作是要依赖于我这两个方法给他返回对象的,那其实我在这里面也可以啊,偷梁换柱一下是吧,我可以给你返回一个别的对象行不行,我重新给你用一个对象返回回去行不行,都是可以的,对吧?所以说这个就是只能结合上你具体的业务,哎,我才知道怎么去处理。干说啊,肯定是比较枯燥的好吧,啊,所以说我们先要记住它的这个特点啊特性那行吧,那这个写好了,写好以后怎么用啊。啊,你光写到这还不行是吧?我们还得再回到我们的配置文件里面,注意我们需要配置一下我们的POS处理器啊,怎么配置呢?那就是一个BID都不需要给,直接给个class就行了,就是my b post process。
09:16
啊,那可能有同学不理解了,那你说你这个东西写到这是个啥意思啊,啊,你就写了个B,你啥都不写这干嘛的呀,注意,其实我把这写到这主要的目的是什么呀?就是告诉LC容器有这么个东西存在。对不对,你配到这个容器里面了,那么将来他去实例化我这个LC容器对象的时候,是不是就能读取到我这个配置了,当他读取到这个配置以后呢,我就能解析到你这个class了,我解析到这个class以后呢,我自然而然就能发现你与我的b post process接口是有关系的,那么它自然而然就把这个类认为就是一个后置处理器了,那么它就会在每一个并对上的。
10:00
生命周期里面去给你什么作用上去了,听懂了吧,OK,所以说呢,我们这个地方,我们只需要诶简单的往这一配就行了啊就是呃,Point好能什么呀,能自动识别啊,是一个什么呀,后置处理器的啊,这个事我们就不用再去担心了啊,人家能自动识别的,OK,那把这个消法以后呢,接下来我们再来去做一个测试啊,大家看清楚了,为了能看到这个效果,我在这两个方法里面呢,挨个都输出一句话,说出什么话呢,我就把这个输出出来,看到了吧,哎,我就把它输出出来了啊然后呢,这个里面呢,也是一样的道理,把它输出出来呀,啊把我这个方法名字输出出来。好放到这个位置,然后接下来我们就来做一个测试,你看这边我是没有做任何修改的啊,来运行一下。好,大家来看这个效果是不是在我们初始化方法的前面和后面分别执行我们的before跟我们的after对吧?这个东西需要我们做额外的设置什么的吗?不需要,你只需要把这个后置处理器写出来,然后呢,在我们的配置文件里面X秒钟一配置,那么它自然而然就会在对应的时机去执行对应的方法,听懂这个意思了吧,能明白了吗?OK,好,这就是我们的B的后置处理器。好,那么最后我们再来说一下,当我们加上这个B的后置处理器以后,其实我们B的这个生命周期它就变成了七个阶段了,对吧?就在原先的这五个阶段上面呢,又多了两个,一个是我们的诶before in,一个是我们的after in。
11:44
这不记住了吧,这个OK啊,好,这就是我们的病的后置处理器。
我来说两句