00:00
好,那现在呢,咱们基本的功能呢,咱们已经实现了,然后下面呢,我们主要来讲一下这个扫描组件,因为这个注解的话简单对吧,咱们只要在我们相对应的类上来加上一个指定的注解就可以啊好,那关键是咱们在扫描组件的时候,大家注意这个还是有一些问题的,什么问题,比如说啊。那我们现在呢,然后咱们这个以后SSM整合的时候,那咱们的这个spring和spring VC。它是要放在一块来使用的,而我们的spring VC,它需要来扫描的是咱们的控制层,而咱们的呢?然后它需要来扫描的是我们除控制层以外的所有的组件。好,那这个时候那我们怎么办?大家想一下,如果说我们要如果说你的spring VC要是把控制层给扫描了,你的spring也扫描了控制层,那大家说这个时候咱们的一个组件是不是就被扫描了多次,那所以说我们现在要做的就是spring VC来扫描控制层,而我们的呢,然后把其余的一些组件来进行扫描。
01:05
那咱们怎么写呢?李彤老师,那咱们就一个一个列出来呗。比如说我们的spring在扫描的时候,你不让它扫描控制层,咱们扫描come.a的硅谷点spring.service spring.DA对吧,然后还有spring点其他的,然后还有spring点另外的一些包,对不对?好,然后大家注意这个时候就比较麻烦,那我们是不是就要把咱们所有需要来扫描的包是不是一个一个的列出来,否则的话,你要是扫描一个比较大的包,那这个时候咱们的控制层的组件就会被重复扫描。好,那这个时候我们可以怎么做呢?在咱们扫描组件的时候啊,大家注意,然后在我们的这个标签里面,它有两个子标签,哎,一个叫做context的冒号exclude filter什么意思,这叫做排除扫描,然后也就是说来对来排除我们对某些组件的扫描,还有一个叫context的冒号include computer什么意思,这个叫做包含对某些组件的扫描,换句话来说,这就是不扫描谁,这就是只扫描谁。
02:07
OK吧,好,那我们先来看这个叫做exclude filter,然后这里面呢,大家注意咱们需要来设置一个type,这个type指的是什么?指的是我们当前咱们这个排除的时候,咱们的一个类型,我们要根据什么来进行一个排除,比如说咱们在这常用的两个,一个叫做aation,一个叫做s accessable,然后这个是根据咱们注解的类型进行进行排除,这个是咱们根据类的类型进行排除,也就是说当我们写它的时候,然后我们就可以把咱们通过某一种注解所标所标识的这个类全部都给排除掉,而如果我们用的是这个的话,我们就可以把某一个类,然后它的一个这个扫描给它排除掉,这个大家注意啊,我们经常用的就是这两个,那咱们下面咱们就来看一下啊。比如说咱们在这用allation,那这里面写什么?比如说我现在我要把咱们的控制层的扫描给它排除掉,那我们只要来找到咱们的控制层的这个注解,然后点击右键copy references,把它的全类名,然后给它放到这个位置,大家注意,这个时候它就不扫描控制层了。
03:20
能听懂吧,这个时候它就不扫描控制层了啊好,那下面呢,我们就可以来进行一个测试,咱们做的这个操作就是通过注解来进行排除,然后将我们的控制层组件给它排除掉,那我们现在咱们再来测试,来我一个执行,大家看啊看在这直接报错,报什么错,No such DeFinition exception。他说我们当前咱们的哪一个并没有找到啊,他说什么类型的并没有找到,User control类型的并没有找到,那不就是说明我们当前你的control,你虽然说加上了注解,但是咱们扫描了没有,并没有扫描。OK吧,好,然后大家看,那你看它影响不影响我们对其他两个组件的扫描呢,我把这个user control咱们给它干掉,然后我们现在咱们再来一个执行,大家来看啊。
04:11
好,大家看你看service跟do咱们是不是都可以获取到啊,对不对,所以说这就叫做排除,这就叫做咱们扫描的一个排除的情况,好,然后当然咱们也可以根据类型来,根据类型来进行扫,来进行排除,比如说我把这个东西给它注释掉,然后下面咱们再写个context的excclde filter,然后咱们来选择第二个叫做a signable,对吧,然后在这咱们需要写什么,写的是某一个类的类型,你比如说我们现在把user controller,把他的全类名复制过来,放在咱们的exception里面,那这个时候他就只会他再去扫描谁的时候,扫描我们当前的user controller的时候,就会把它给扫,在扫描我们这个包下面的类的时候,就会把咱们的user controller来进行排除。
05:00
OK吧,来,咱们把注解去掉,下面我们在这再来一个执行,大家会发现你的user controller你仍然是获取不到的,大家看一下啊,User control类型的病咱们是没有找到的,OK吧,行,好,那这个是我们当前咱们根据两种方式来进行的排除,一种是根据咱们注解进行排除,一种是根据类的类型来进行排除,好啊好,那其实我们用的比较多的就是上面这一种,根据注解的类行排除,因为咱们因为咱们说了,咱们以后需要用到这个标签的时候是什么时候?SSM整合中spring mvc它需要来扫描的是控制层,而我们的spring需要来扫描的是除控制层以外的其他组件,那如果大家要用这个的话,那你会发现你的control里面所有的这个什么什么control,咱们是不是都要有这样的一个标签,但是如果我们现在咱们用的是根据注解来排除,那咱们的控制层组件你加的不都是什么A的controller注解吗?大家说是不是?
06:01
行OK吧,哎,行好,在这咱们把这个注释呢来写一下,大家看啊,然后咱们的扫描组件啊,然后咱们说这个标签,哎,Context的exclude filter,然后这个是干什么的,叫做啊排除扫描。啊,排除扫描OK,然后呢,我们当前那咱们有几种方式,大家注意咱们有两种方式啊,然后咱们的type,然后这个属性用来设置咱们排除扫描的方式,好然后它咱们常用的只有几个,有两个大家注意一个叫做all notation,然后一个叫做三,然后这两个分别是什么意思,这个all not,然后是根据什么叫做根据注解的类型,然后进行排除好根据注解的类型,然后来进型排除好,然后此时咱们的一颗expression中,然后咱们需要来设置排除的。
07:07
注解的全类名,全类名OK,好,再往下叫做accessable,然后这个是根据谁根据咱们类的类型进行排除,Expression中,然后咱们需要来设置的是排除的类的全类名OK吧,好,大家注意,这个是我们当前咱们的一个排除的功能啊,那我们下面咱们把这个东西给它注释掉,那我们刚才看到咱们有这个排除的功能,我们是不是还有包含的功能,对不对,大家看啊,咱们在这用context的,然后叫做include filter include是包含,然后include叫做叫做排除,然后里面它表示什么意思,表示的是我们当前值扫描谁,那它也有type,大家刚才应该也都看到了,这个TYPE1共有几个值,来咱们在这再写一下,这个TYPE1共有几个值,跟咱们这里面是不是一样啊?那你用allation,就是根据咱们当前的注解的类型进行包含这个。
08:07
Able,然后就是根据类的类型进行包含,比如说咱们在这写个它,然后这里面咱们把谁放进去,还是把我们当前咱们的controller给它放进去,Controller这个注解的权利名放进去,那大家说这是啥意思?这是什么意思?这是表示的是我现在只扫描谁。我现在是不是在我们所指定的包下面只扫描咱们的控制层组件对不对,也就是用a controller注解所标识的组件,OK吧,好,现在咱们再来测试,大家看好了啊,它对不对,它不对。好,我们现在咱们明明是设置的只扫描控制层,但是你会发现,诶,现在呢,咱们的控制层组件我也能获取到,Service组件也能获取到,19层组件也能获取到,那这是为什么呢?大家注意你看啊,在我们当前咱们的componentound sc这个标签里面,它有这样的一个属性叫什么?叫做use default filters什么意思,叫做使用默认的过滤规则,也就是说我们当前咱们的这个标签,它默认的规则就是这个包下面所有的类它都要进行扫描。
09:18
好,那所以说我们现在咱们在这设置的只包含谁,它有用吗?没有作用,大家想一想,我们要想来设置只包含谁,那我们是不是应该是在不扫描所有类的基础上来设置只扫描谁对不对?所以说如果咱们要用的是这个标签的话,当然这个标签咱们需要来设置,这个需要来设置这个属性吗?不需要,因为咱们本身就是要在扫描所有类的基础上去排除谁的,而我们要想来使用包含,你是在这个不扫描所有类的基础上,然后去包含谁的,这个大家能听懂吧?好,所以说啊,大家注意,为什么它没有效果,那是因为咱们默认情况下就会把这个包下面所有的类都进行扫描啊好,那我们在这这个大家看好,你看它默认值是什么,默认值是处。
10:07
变灰色的,然后大家注意这就是默认值,那我们在这儿咱们需要把它给设置为false,设置为false的意思就是咱们所设置的包下面的类它都不扫描,然后这个时候才可以只扫描谁OK吧?来下面咱们再来一个执行,大家看啊。好,你看这个时候你看他就报错了,报什么错,这可不是说controller找不着,找不着了啊,大家注意,你看报的错是说我们当前的user service类型的病找不到。那咱们的CTRL类型的病在这是不是已经输出过了呀,对不对,对吧,所以说大家看好这个,我们当我们去设置只扫描谁的时候,咱们也同时需要来设置这样的一个属性啊好在这咱们来写一下下面咱们的这个标签,哎,这个标签然后它来设置的是谁,大家说它不叫排除扫描,它叫做包含扫描,叫做包含包含扫描扫描OK,好然后呢,那我们当前要使用这个标签的时候,大家注意啊,咱们需要注意的是,然后咱们需要在啊,需要在。
11:16
这个context的comp,看标签中,标签中,然后来设置一个属性,什么属性叫做use default computers,然后等于false,然后呢,它是什么意思呢?大家注意,如果我们当前咱们在这来设置为true,它默认值就是哎,然后默认值就是处,那处是什么意思?是不是应该是咱们所设置的包下所有的类,然后都需要扫描啊,都需要扫描,然后此时可以使用什么叫做排除扫描。能看懂吗?好,那我们当前咱们把它设置为副之后,这表示什么意思,所设置的包下面所有的类都不需要扫描,都不需要扫描,此时咱们才可以来使用什么才可以来使用咱们的包含扫描,哎包含扫描。
12:11
包含扫描这个大家注意啊,好,那这个东西大家注意设置为处,这个是默认的啊,我在这给大家写一个,这个是默认的啊,这个是默认的好OK,那所以说如果我们要用exclude的话,那我们就不需要设置这个属性了,但是如果我们要用这个标签的话,那我们就必须要设置这个属性。当然了,大家想想,你说这俩标签谁比较有意义啊,就是说我们以后咱们用的哪个比较多呀,你的排除用的比较多,还是包含用的比较多。大家想想,你的包含不就是只扫描谁吗?那我现在我根据注解的类型,我只扫描我的控制层组件,那大家想我直接在这来写com.a的硅谷点spring.controller它不香吗?我还要在这里面对吧?然后来设置一个比较大的包,然后再把它的默认的过滤规则给它,这个设置为false,然后再设置只扫描谁对不对?所以说这个东西其实咱们用的并不多,我们用的比较多的就是排除,然后在我们指定的包下面将哪一些注解,将哪一些组件,然后给它排除掉,能听懂不?哎,行,这样子啊,好,那当然呢,大家注意,然后我们当前咱们的context的compund sc里面,你可以设置多个排除,你也可以设置多个包含,但是你不能说我在这儿啊,我既设置排除,又设置包含,咱们就从它有没有意义这方面来说,大家想想你说它有意义没有啊,我们这个。
13:45
设置了排除,那你排除掉的剩下的不就是包含的吗?你设置了包含的,那剩下的那不就是排除的吗?大家说对不对?所以说咱们不可能说在这里面设置一个排除,再设置一个包含,你可以设置多个排除,或者说是多个包含,但是两个肯定不能同时存在,咱们再说从代码的层面来说,大家来看,你看咱们从配置的方面来说,我们当前的这个标签,它是不需要来设置这个属性的,也就是说它是需要把它设置为处这个默认值的,而你当前设置这个标签,然后咱们这里面必须为false,那你怎么去设置这个标签里面既存在它又存在它呢?那你当前的这个属性的值,你要设置为啥处来写个或。
14:29
False,不可能吧,是不是,所以说大家注意咱们以后用的比较多的啊,就是谁啊,就是这个排除,就比如说咱们之前跟大家。举的这个例子,SSM里面spring m VC只扫描控制层,而我们当前的spring是要把除控制层以外的所有的组件来进行扫描的,那这个时候咱们就需要用到谁呀,就需要用到咱们的排除扫描,OK吧,好啊,行,这个大家注意,那我们把这个标签呢,咱们给它注释掉,然后咱们再来写一个咱们常用的啊,常用的话就没有那么多事了,因为像我们当前咱们的这个工程来说的话,我们就是要把come点爱的硅谷点spring下面所有的类都进行扫描,好这里面这个大家要知道是什么意思啊,再说一遍,之前跟大家说过啊,这是因为咱们的注释。
15:20
里面不能嵌套注释,所以说当我们这样去写的时候,然后他就会把咱们的这个,就把这咱们的这个东西,然后给设置为它所对应的实体啊,这个我们在讲咱们的这个依赖注入的时候,为为不同类型的属性,然后进行赋值的时候啊,咱们就讲过这个对吧?它就咱们当时是讲的哪个知识点呀,叫做为属为属性来赋值一些特殊的值。啊,然后就是咱们的叉L的实体,如果我们现在所负的值里面有这个特殊字符,咱们就要用它所对应的实体啊,你看咱们的这个就是一个实体,这是小于号,然后这个是叹号在这儿呢,然后这个呢是两个横线,知道吧?啊,这是两个横线啊。
16:06
好,那我们平常咱们在用的时候,像咱们当前这个工程里面,咱们怎么用,直接一个compound com.ADD硅谷点spring就完事了啊。OK吧,好,那这是我们当前这个扫描组件的一个问题啊。
我来说两句