00:01
看一下,哎哟坏了,我把这个打印的清了。等一下我们看看啊。哎,我们要说的就是这个。No,萨病带飞你神。他找一个病找不到。找不到,然后就抛这一场,找哪个便找不到呢?哎。他就找名字叫这个病,他找不到啊,没有叫这个名儿的病可用,他就会抛这个异常。这是我们把这个spring security啊,整合到我们这个项目里边哈,它首先要解决的一个问题。哎。
01:02
嗯,去解决。找不到这个病的问题。嗯。先提出这个问题啊。哎,先提出问题,分析问题,解决问题。哎,先提出一个问题,我为什么找不到对象呢?然后分析一下这个问题,我为什么找不到对象呢?分析出原因以后,针对这个原因是吧,然后再去。再去有针对性的采取一定措施,你就解决这个问题了,对吧,哎。哎,目标思路代码啊。哎,分析完了以后,你发现因为你长得太帅了是吧,这个追求你的女生太多是吧,然后你选择困难症是吧,所以找不到啊。然后就就决定怎么办呢,我再再丑一点吧。就是提出这个问题哈,呃,然后下边这个就是说,关键是我们去得去分析下这个问题。
02:06
来给大家解释一下啊,为什么会出来这个问题?呃,这里边儿就不得不谈到我们这个,这是这事是谁干的呢?这是我们的filter,就security这个filter。就是他啊他。这哥们呢,那他当然他会这个启启动哈,就他呃外部用启动的时候呢,会去创建他的对象。它会完了会初始化,它在初始化的时候。他就要去找一个病,找病呢,就是找我们这说的这个,他报错这个病。这个名呢,这个B的名字就是filter name就是他啊去找这个B。
03:02
他查找这个病呢,他得到LC容器里边去找。查找这个病。他先找什么呢?他先找LC容器。哎,他得先去找LC容器。呃,找LC容器呢。是两个结果啊,找LC容器,找找LC容器是两个结果,一个是能找到,一个是找不到。呃。一个是能找到,一个是找不到。这个我先放一边选哈。呃,如果说如果说他找这个LC容器,如果咱先说他这如果找不到的话。
04:02
找到不到的话,他不会跑异常。啊,他找LC容器找不到他不会跑,腿长他就会放弃。就就不找了,暂时放弃啊,有句话说的好,世上无难事,只要肯放弃。放弃,放弃永远都是最容易的。对。他就放弃了,放弃呢,放弃以后。呃,放弃以后呢,他。会在接收到就是过滤拦截到第一个请求的时候,再尝试再找一次。啊,这个是第一次请求。啊,初始化的时候,它会找一次,出第一次请求的时候呢,他再找一次。还是去找LC容器。呃,当然,这个时候其实还是两个结果。
05:05
一个是能找到,一个是找不到。这个时候如果还找不到,那就跑一场了,这个时候他就会他就确信呢,我整个环境里边,你确实是没有准备LC容器啊,找不到它就会抛异常。泡一场他就问你啊,泡一场就是。问我们。嗯,是不是是不是,是不是没有配dispatch service或者listener,咱就不管那个了啊,反正这边他就找不到的话,他就这时候要跑一场。那能找到呢?能找到的话。他就会去找这个病。哎,他会去找这个B。
06:02
当然这个我们这儿还没说完,他查找这个就是初始化的时候找LC容器。如果他能找到,他也会到这个LC容器里边去找这个B。啊,就是下边这吧,先先不说这边哈,先不说这个事哈。这个下边这儿往下一会儿再说啊他。呃,查找LC容器,如果能找到LC容器啊,这找这指的是找到LC容器,它到LC容器里边去找这个面。那么我们现在其实就是去去想哈,这个LC容器是。我们现在是两个LC容器,我们现在是两个LC容器。哎,这个两个C容器呢,一个是spring的,一个是springc的,Spring的LC容器呢,是这个context loader listener。
07:03
的呢,是这个。这三个东西,它们的启动的顺序。我们拿过来哈,你看啊。Context listener。和dispatch。还有这个filter哈。这三个东西他们启动的顺序。或者说初始化的顺序。先初始化监听器。然后再初始化过滤器,然后再初始化这个。所以说呢,它先有这个先有spring的LC容器。我们把这个吧,咱们拿到笔记里边哈。呃,分析问题哈,首先第一个哈,我们需要先明确。三大组件的启动的顺序。
08:06
首先是我们这个叫contact listener。他初始化。然后呢,这个时候呢,他会去创建我们spring的LC容器。呃,其次呢。是我们这个filter。哎,初始化他要查找。LC容器。查找并。最后。才是Dis。初始化。啊,然后呢,这个时候他创建的是Mac的LC容器。那么大家想。我现在呢,这个deleating filter proxy,这个filter它初始化的时候,它找LC容器。这个时候一初始化好的LC容器只有它。
09:03
这个还没生出来呢。他找要能找到的话,也只能找到的是康奈listener的这个spring容器。啊,能找到的也只能是找到他。那么我们前面说过了,我们这个。为了让它能够对我们外部环境对请求去拦截,我们这个东西呢,是希望放在MC的LC容器里边的。Spring在LC容器里边是没有的。就算你把它放到spring的LC容器里边,它只对这两个东西有效,对请求这些东西无效。所以说呢,这里边儿我们就可以去。呃,这么去说了啊,他只能找到。的LC容器。啊,只能找到他。然后呢,到这个spring LC容器里边去查找这个B。啊,那。无非也就是两种情况,一个是你能找到,一个是找不到,你要是能找到呢,你找到的也是一个废的。
10:07
啊,你要是能找到的话,你找到的也是一个废的。孩子咳嗽老不好,多半是废了,打一顿就好了。呃。如果能找到啊,找到的是一个。F。啊,不能用啊,为啥不能用呢?因为他对请求无效,嗯。因为这是three的LC容器里边的。找到了用。那如果找不到呢?找不到就跑一场。我们现在就是这个情况。哎,我们现在就是这个情况啊,如果是找不到。就泡一场。
11:04
我们现在这个为什么会抛出这个异常,就是这个原因啊。就是这个这个filter呀,它初始化的时候找IOC容器。那么先这个时候它只能找到spring LC容器,Spring这里边呢,我们又没放在LC容器里边。他就没有。啊,就是没有。找不到,找不到就泡一场了。我们这时候走的是这条线啊,就是假设呢,我们让这个是假设,如果把这个配置类哈。假设这个配置这不放在这里边的,给它放在假设放在service下边啊,Spring也能扫描到,那么放在这里边,那么它能找到,能找到呢,但是这个我们将来用不了。哎,这边少一个引号。哎,他不能用。那这时候其实我们还没有说完哈,你看这是好几条线哈。你看啊,这是一条线。
12:02
呃,这是一条线。这是一条线,现在三条线了啊,这边这是。这是一条线,这是一条线啊,这是这个有好好几个分支的,这就是啊。那么接着我们接着这边说,如果说他这个。就是说它初始化的时候找不到,这不就放弃了吗?这边放弃了,他就到第一次请求的时候,这边再来找。啊。嗯,这边应该是这么好啊,呃,放弃。是放弃以后啊,第一次请求的时候再来重新再去找。呃,找,那如果是找不到,它会抛一个找不到LC容器的异常。哎,然后这边呢,是抛一个找不到B的异常啊,这个不一样。如果能找到LC容器呢?
13:02
这个就很遗憾,他找到的我们现在是俩LC容器,还是他找到的还是spring的LC容器。虽然现在有俩了。但是呢,他还是去找那个spring。虽然现在有两个LC容器。但是。这个filter啊,就它还是值。找我们这个spring的容器。所以说呢。这个就往下呢,其实就到这儿是往后是一样的啊,他找到这个还是去找这个病,还是说能找到,找到是一个肺的,找不到是一个这个跑跑跑找不到病的这个异常。这么看,这事儿好像是无解了。这边哈,就是说这是这是一个。
14:02
呃,当然你要光看这个图,可能你看不太明白哈,就是这个,你得结合我跟你说的这个啊。啊,就是这个翻圆满翻了好几个小时啊,就是就终于把这个他怎么干这活给他捋清楚了。呃,它的启动的顺序,然后是这个deleating filter呢filter,嗯,它查找LC容器,然后查找B的工作机制。这个filter就是他哈。
我来说两句