00:00
啊,那么上一节课呢,我们简单的介绍了一下这个component的这个用法,那么主要呢,我们在扫描的时候,我们可以这filter,我们规则是按照解行排除,按照他规则,我们这节课来说一下这几个常用的规则。首先呢,我们上一课指定的这个notation,它的意思呢就是按照注解,那我们之前写了include filters,意思就是只包含啊,我们使用了按照注解的方式,我们指定了一个ctrler,那么LC容器中只会来扫描controller注解来标注的这些组件。好,所以说呢,这是一种方式,也是我们最常用的方式,那我们来看啊,它的其他方式,它其他方式呢,也有这个sable type,这是呢,按照我们给定的类型。
01:04
这是第二种,哎直接呢,按照我们给定的类型,按照给定的类型,那么按照给定的类型的话呢,好,我们这有一个filter,说这第一个呢,说只来包含CTRL注解,那我再来写一个规则,这个include filter里定义我们这个组定义很多规则,再一个。好逗号。我们呢,再来写一个过滤规则,我们来用第二种方式,Type,这个呢,我们来指定为filter type的,咱们这个叫type,这个意思呢,按照我们给定的类型,那么我给他明确的指定一个类型,比如我指定book service。
02:01
那么呢,这样只要是book service这种类型的组件都会被加在容器中啊,不管是它的子类还是什么它的时间类等等啊,只要是这种类型的,我们来测试。哎,我们看到,哎,现在service又被重新包含进来了,我们这个啊,包含过滤就生效了,这是按照给定的类型,这两个呢是我们最常用,包括还有其他的几个。我们可以看一下其他的这几个filter type,其他的这几个还有,哎,我们可以来写一个UN的表达式。使用接表达式的,那么这个呢,我们不太常用。基本上呢,不会有用,所以说呢,我们这个就不说了,然后还有咱们说的这个I,我们使用正则表达式,然后呢,大家也可以用正则表达式来指定,只要满足这个正则表达式。
03:15
那么呢,我们来着重来说最后一种,我们可以自定义规则卡通。比如说呢,这个规则是使用自定义规则,这个自定义规则怎么用呢?我们来看他说我们这个啊,我们可以来包含或者过滤我们给定的这个规则,这个给定规则呢,必须是一个诶叫type filter的实现类,所以说呢,我们先来写一个type filter的实现类。好,我们就直接写在这个con里边。来写一个type filter,我们的这个类型过滤好,我们实现这个type filter接口。
04:09
点一个分式,这里呢有一个慢方法,那这个慢方法呢,返回一个布尔,这个布尔呢,如果是处,那就算是呃匹配成功,如果是false,那就匹配失败了,而这里边呢,有两个参数,这两个参数是什么呢?我们可以在接口里边看一下,第一个叫Meta data reader,这Meta data reader呢,接口里边的描述是说,诶,它是咱们这个当前类,也就说这个reader它是。读取到的,读取到的咱们这个当前正在扫描的类的信息,那么呢,还有一个叫Meta dataer factory,我们点进去这个Meta data factory,它的作用是什么呢?诶也可以看人家的描述,他说这个东西呢,它是一个工厂,可以来,哎咱们这个探索其他这个类,哎也就说不只是当前类,可以探索其他任何类的啊这个信息,这是呢,可以获取到其他任何类信息的。
05:23
我们来看一下这个。那么它有一个方法叫get,这是来获取当前类注解的信息,获取当前类注信息,那么呢,还有有一个叫me data read.get还有一个叫class,这是获取呢当前这个。获取当前正在扫描是类的,咱们这个类信息。
06:06
比如它的类型是什么啦,它实现什么接口啊,啊都在这儿,那么呢,还有一个data read.get哎,这resource,这个resource呢,是来获取当前类的,获取当前类资源信息,这个所谓的这个资源就是比如这个类路径,类的路径,它在哪个盘啊,存的是哪个class文件啊等等等,那么呢,我们把这几个信息拿到,我主要呢,先来看用这个类信息class me data这里边呢,有一个方法叫get class,诶我能获取到这个类的,我们当前获取到这个类的类名,或者它的这个啊,这是的get class方法啊,还有呢,它的父类的类名,还有它的这个子类,还有这个接口等等等等,我们都可以,我就。
07:07
它的这个类名看一下来输出一下,输出一下啊,来看一下这些类名是什么。诶CTRL喂,好,那么呢,为了咱们这个type filter写好了,那就得咱们配在这个,我们重新指定一下,指定呢,我们这个新的新的过滤规则。这个过滤规则呢,我们是自定义的过滤规则,等于filter type点我们这个,那么接下来的这个指定的就是我们的那个type filter my type filter,那么过滤规则呢,就是由我们这个type filter返回触或false,哎,代表匹配还是没匹配,那为了不影响我把前面两个除掉啊,要不然前面两个filter过滤以后的东西才轮到第三个菲处理啊,那么啊,可能有点不好看啊,我们来。
08:18
测试。造。哎,我们现在能看到,只要它当前处理到哪个类,这个类的类型信息,哎,我们都能获取得到,那接下来呢,我们可以来做一个这个事,我来写一下默认的过滤规则,但是现在来看我们IC容器中呢,只有一个跟,哎,也就是说我们的配置类跟person这些controller service都还没有,因为我们这个包扫描指定的是自定义规则,而我们自定规义规则呢,现在又写的都是返回false,那就是一个都不匹配了,一个都不匹配对不对,那就都没包含进去。我们呢,就来指定一个规则,哎,比如我来做一个简单的判断,如果说你的这个class name class呢,就是打的这些包名加类名,如果你这个class.contents包含这个ERER,像我们这些service啊,哎,这个class里边就有ER,只要包含这些ER,那我就给你return出。
09:28
就说呢,那就匹配成功,匹配成功呢,就会被包含在容器中,哎,我们来做一个测试。好,我们现在来看,现在呢,容器中打印的组件,前面是我们在扫描的类容器中打印的组件,你看我们这个my con跟person,嗯,这个呢,不是我们包扫描的结果啊,这个一直不是我们包扫描的结果,这是在man,它是一个本身就是一个啊配置类,然后呢,我们用be给它容器中加的东西,而剩下的两个,一个叫filter,你看它包含ER,哎,连这个,你看我们这个filter呢,虽然没有at being给容器中加,也没标什么at component注解,但是呢,我们写了自定义的判断它包含ER了,所以说IOC容器中也有它,那么呢,Book controller,哎,Controller里边也有ER,包括service里边也有ER啊,这个book可丢里边没ER,所以说呢,它没有被包含,这就是我们写的一个自定义的这个包含规则,而这个规则呢,这个type。
10:38
Filter为什么会有呢?这就是因为哎,这个自定义规则,因为我们是说扫描come at硅谷包了,所以说呢,Come at硅谷包下的每一个类都会进到这个规则里边进行匹配,就是说呢,扫描到的每一个类都会在我们这进行匹配,拿到每一个类的类名,我们看它有没有牙,好,这就是我们。
11:03
定制咱们这个过滤规则。
我来说两句