00:00
咱们再看看,咱们再看看另一种解决方案啊。啊。你,你当真的听。哼哼哼哼哼哼。这圆满。也就是说呢,这个事儿吧。不,你看这个时候你看要不不改源码就改我们自己,你看就改我们,破坏我们自己的结构,不改我们自己就改它,不改他就改我们自己,你看这时候就是我们现在这两边呢,已经已经这个不那么匹配了,你总得有一边要让步啊,总得有一边要让步啊,不然的话,你这个问题就解决不了。改源码呢,你看我们这个思路是这样的哈。我们还是保持现在就是两个LC容器。
01:00
哎,那么初始化的时候呢,如果它初始化的时候还是要去找LC容器的话。那么还是就是会找到找到spring的这个LC容器,所以这时候呢,我们不让他找。哎,就说改这个源码哈。嗯,找到我们这个这哈。说他如果是now这个target name这赋个值,这个赋值要要要要要赋值要保留哈,但是这儿呢,我们就这就别找了啊,这找能找到找到就去初始化了,所以这不让他找这部分呢,我们改源码的话,把这部分给它注释掉。呃,这个这个是这是一个点,另外一个点呢,就是说让他这不让他找,那他这边就会放弃,到第一次请求的时候找LC容器。这个时候呢,它还是有两个,有两个呢,如果按照他原来的方式找,找到还是spring这个,所以说这也得改一下,让他去找springc的这个LC容器,就改这两个地方啊,改这两个地方就好了。
02:06
我们先在这儿先说一下啊。嗯,我们要修改的就是delegating proxy。它的源码,诶,然后呢。呃,修改两处。第一个呢,是初始化时。嗯。直接跳过。查找LC容器的环节。第二个呢,是第一次请求的时候,哎,呃,直接找spring。MVC的LC容器。哎,把这俩把这俩地方我们去确认啊,让他做到这个事情就就解决了。嗯,来改源码,改源码的话,咱们找到deleg filter哈。
03:05
我们把它这个先建个包。然后呢,建这么个类CTRLC。诶,然后呢,过来这边ctrl a ctrl c。Ctrl a ctrl v。哼。这个很少是吧,啊很少哈,全部复制全部粘贴,然后呢,现在我们找到ctrl o找他这个in filter bin这个方法。就把这部分注释掉,嗯,把这个,其实你看它这个注释呢,其实说的也是这个意思啊,他说fetch fetch就是取回找到的意思,Fetch spring root application。
04:03
他就是要找这个跟级别的。然后呢,初始化这个delegate early就是early就是早的意思嘛,就是比较早的去初始化delegate的这样一个时机啊,Delegate就是我们说授权的那个意思。If possible啊,如果是能行的话。啊,如果能行的话,就就早早的把它初始化,这是一句话啊。这个你看这美国人说什么?他颠倒着说,他放后边说啊。If the root application contact will be started after this filter proxy,如果跟级别的LC容器呢,比我们这个要呃,开始的要晚。是吧?After this future pro we will have to resort to lazy initialization。Lazy懒延迟,哎懒加载,哎懒加载,其实他推推迟到第一次请求的那个时候了。
05:03
所以说我们现在呢,是要把这部分给它注释掉。嗯。看啊这个。CTRLC,诶,我们在人家spring这个,人家这个世界顶尖的程序员写的这个代码上面去改的话,我们是不是这个啊。有一种很爽的感觉啊。这是世界顶尖的程序员写的程序啊,然后我们拿过来,我们要改一下,哇塞啊,这个事情忽然之间觉得很少啊。就好像是这个,呃,你在电视上天天看一个电影明星是吧,你一个你觉得高不可攀的,突然之间有一天他跟你在马路边吃路边摊啊这种感觉。哎。
06:04
哎,然后这是这是我们要改的这个地方啊,这个地方是我们要,我们就是说把这部分给它注视角。诶。好嘞,然后呢,呃,下一步就第一次,第一次那什么的时候。第一次请求的时候呢。找一下啊,他在哪做的第一次请求do filter。嗯,他在这里边要去找,那么我们说这个方法哈。这是在当前类的,但是它实质上呢,靠的是这个工具类去找的,呃,实质上靠的是工具类去找的是工具类。要。呃,工具类哈,在这里边。啊,这也是工具类里边的方法,就是这个东西是已经在工具类里边已经写死了,就这个属性名。
07:03
嗯,那么我们说呢,你别来这儿改,别来这儿改,你要来这儿改的话,你又改第二个类,就把它又改了,你把它改了以后呢,别人在别的地方调这个工具方法就按了,你改了以后,这个运行可能就出问题了。这个时候就这个时候就呃。蝴蝶效应。你不知道别人在什么场合下会用到这个方法,结果你给人家改了。然后就可能很可能导致别的地方就出问题了。啊,你这一个地方,你你自己这是顺了,别的地方崩了。这就是说这就会和别的程序呢,会耦合在一起。偶和偶是不是这么写好像?耦合啊,耦合我们不要不要去耦合,要高内聚低耦合啊。你看这个我们拿人来说,我们各个器官呢,都是,呃,正常健康的话,就是胃是胃,肠的是肠子,肝是肝,心是心是吧,你要是这个,如果一个人得了癌症的话,癌细胞都扩散了。
08:07
啊,这个癌细胞呢,它这个把各个器官呢,都粘连了啊,他已经这个都分不清楚了,这时候医生就只能告诉你说保守治疗。啊,这个然后就这时候就不能做手术了啊,这个肿瘤这个前期的话是肿瘤的边界很清晰,你把它切了就就完事了,可能就就好了是吧,但是这个到晚期的话,癌细胞都已经扩散了是吧?哎,这个时候咱们就保守治疗,咱们就这个时候重重点就减轻病人的这个痛苦是吧,然后带癌生存是吧?哎,带癌生存。哎,我们公司体今年体检的时候,体检之前我就已经做好这个心理准备了。这东西是吧,天有不测风云的这事是吧。啊,然后所以说呢,在这儿哈,我们do filter。哎,你癌细胞扩散了,就是各个器官它耦耦合在一起了。
09:01
哎,健康的话,他们各自是有各自的功能是吧,它是各自独立的,所以说我们这儿吧,咱们就不调另外一个方法了,咱们这儿呢,直接去咱们自己去写一下这个代码啊。啊,这是人家的这个啊。嗯,再来来,我们来,咱们自己这儿来改哈。这个东西啊。这个先服务器先停掉。嗯,这个就是说这个。八。呃,原来的查找LC容器的代码,这个注释掉。然后呢?下边哈是这个按。我们自己的这个需要。呃,重新编写。我们自己是咋需要的呢?呃,我们需要一个。嗯,这里边儿分第一步哈,就是说我们得先得去。
10:00
跟它一样,也得从service context里边去找这个LC容器,因为LC容器初始化好以后会放到service contact这个域里边,Set ATT tribu放在这个域里边,而我们要solid contact呢,有个方法啊,Get。Context。这哪来的呢,This?哎,当前类里边有一个方法可以获取context,哎,它这已经有这个变量了哈,已经有这个变量了,我们看这个东西咱们能拿到吗。啊,这还不行。啊,就这个,他在这个父类里边还是在哪哈,看看。他继承这个。呃,这里边儿有啊,这个是负类里边有有个私有的。我们这药呢,可以给你,这边有get service context可以给你,但是你不能叫这个名的。Get,呃,本类没有哈,也是这个副类里边的。
11:02
Get service context这里边有。这个是社保的此类可以用啊,所以咱们叫这方法呢,咱们去改个名。哎,咱们去改个名,就像他一样,就叫SC吧,哎,先。获取对象。拿到这个对象以后呢。呃,我们去拼接一下spring mvc。嗯,加。这个LC容器。去存入我们context域。到时候使用的属性名。哎,这个属性名我们叫at tr name这个咋拼哈,Controltl shift t,呃,我们它的框架方面的初始化是负类framework。
12:06
Framework里边呢,有一个属性名。你看context prefix。哎,这个类全类名get name,这不全类名吗?加context。但是后边还不够哈,还加一个啥来着。我们这个得得去找一下啊。它里边也有个方法in b。嗯。In web application context。I get a connect。从哪儿有个site at tribute?Get solid contact set at tribute。这是他调个方法去get一下。看这里边get name就是前面我们说的这个东西啊,加上它诶。
13:02
嗯,这是一个常量哈。这个常量呢,我们可以这么去引用它一下。Framework so。这个类,这个叫contextx。确认一下啊。Service contact prex加上survey名称,这个survey名称咱们没有这个方法啊,咱们没有这个方法,这是在filter里边啊,呃,咱们没有,没有的话咱就硬写一个呗。这个哈。哎,就是外部毛里边。我们spring就是他。所以说就拼接一下。哎,这就是这个属性名。把这个属性名根据at t哈。
14:02
从context这个域中。哎,去获取LC容器这个对象。哎,不是啊,不用衣了,咱们叫sc.get attribute。转一下类型,转成它。就完事了,当然他在这儿判断一下,确实是这个判断继续保留,如果这儿找不到的话,那他说明这个LC容器就没有提供啊,没有提供哎。这就是我们所做的这样一个修改啊,我们把这个类呢,把它拿过来哈。
15:03
这边是我们说改。源码要。创建同胞。同名的泪啊。Control。好嘞。哎,然后这个时候我们改完以后,这个代码改完是这样的哈,这个do filter。好,然后就是说这里边儿哈,我们把我们改的这些地方呢。嗯。这些是我们改的。去标记一下啊。
16:04
好嘞,那下边咱们得看看啊,它是不是按我们这个去,哎,这么去运行的。
我来说两句