00:00
好,上节课呢,我们说了一下在方法和构造器上的一些自动装配,那么呢,如果说我们现在的自定义组件需要用到spring底层的一些组件,比如这个LC容器,比如它底层的这些工厂等等,能不能用呢?也可以我们来说一下,比如说呢,我们这个自定义组件想要使用SW容器底层的一些啊组件,比如我们这个application contest。或者呢,我们底层的这个病单等等等等这些东西,哎,我们如果要用它,我们只需要让自定义组件实现咱们这个叉叉叉,呃,V接口,哎,这个叉叉V我们以前呢说过一个,比如我们你打开以前的这个dog,诶我们实现了一个叫applicationest,这个呢,它有一个方法叫set application,在LC容器启动创建dog对象的时候,这个方法会被调用,并且呢把application入进来我们就能用了。那么呢,类似于这些东西的设计有很多,哎,这有一个总结口叫aware,这aware的设计呢,我们可以看一下spring的描述,它就是呢,为我们这些B应提供了我们可以使用spring容器底层的一些对象的功能,它类似于这种叫回调函数的风格。
01:41
也就说我们只要实现叉叉叉接口,那么呢,我们这些aware接口规定的那些方法,在对象创建的时候就会被调用,哎,帮我们自动注入这些组项实现OK,在创建对象的时候,哎,然后呢,呃,会调用咱们这个接口规定的方法注入咱们这个相关组件。
02:11
那么呢,我们来看啊,总体呢,大家来参照这个aware接口的设计,哎,我们来找上几个。好,大家来看啊,这些接口这么多实线类呢,我们不看,我们主要来看这个接口。哎,我们来主要看这个接口,比如呢,有application contest aware能帮我们自动注入IC容器的,还能呢,帮我们注入咱们这个事件派发器的,哎,这个我们后来再说,还有这个类加载器并翻哎并名字,还有这个什么,呃,Value reserve,我们这个值解析器,以及环境我们这些啊,导导入相关的东西啊,还有source国际化啦,比如我们这个资源加载器啦等等等等,那我们就来挑上几个,第一个applicationtest,我们呢,就以这个read为例,我来实现application contest接口。
03:12
Application contexttest aware接口,哎,那实现这个aware接口,然后呢,这个接口就会有一个set application contexttest方法来,我们就能用到这个applicationest,这个对象呢,就会被自动入进来,它就代表的是LC东西,我们可以来看一下,我来输出一下,输出一下来我们传入的IOC,我呢就把这个application contest对象对象啊打印一下就行了。这是我们这个application,当然,哎,如果我们后来要用,我们就应该用一个变量把它存起来。Play开,哎,我们应该用这个电量把它存起来,哎,我只是呢简单的打印,打印等于才生好,那么呢,我们为这个read类,我们多实现几个aware结构,比如我们再来看第二个。
04:17
第二个呢,我们来用一个叫鼻音,鼻音。Name aware这个什么叫being name呢?这就是being名字,能把它复制过来,来看一下这个aware能做什么添加未实现的方法,哎,这只有一个set name方法,这个name呢就是能,哎,我们LC容器创建这个对象,为这个对象起了一个什么名呢?哎,就是说我们去容器中按照ID查找,按照病的名字查找,容器呢,就会把这个名字在这给我们传过来,我们当前对应的名字,哎,我们可以拿拿在这打印一下,包括呢,我们再来实现几个导贝。
05:04
那看一下还有哪些?Where,好,我们就来啊,随便照一些演示吧,哎,还有一个挺好玩的,叫embed value aware。Contra seat。复制在这,那这个是一个什么呢?添加未实现的方法。哎,它会传一个string value6reserve,那我们来看一下这个ver,这个aware呢,它其实是用来,诶,它其实呢,会给我们传入一个string值的这些解析器,它是用来解析我们这些字符串的,解析哪些呢?啊,比如我们写井号大括号啦,或者什么我们可以点进string y6serve啊,我们来解析我们这些占位符,哎,它说它是用来解析我们这个string的值,你这个string的值里边呢啊,会来把我们这些啊占位服啊帮我们解析过来,返回一个解析后头值啊这个呢挺好玩的,我们可以也试一下,我用这个reserve,比如呢,我们IOC容器会自动的把这个啊值解析器传给我们,我们呢就调用它的方法来解析上一串值,比如解析什么呢?我们比如就解析一个,哎,你好,我们打个招呼,哎,我们说能写Dollar大括号,Dollar大括号我们以前是不是能取出环境变量中的值啊,以及配。
06:26
文件中我写一个O或者呢,一个是spring表达式,像些表达式都是用这个value reserver解析的,比如我随便哎写一个。啊,容器启动的时候呢?啊,创建我们瑞的对象,会为我们把这个reserve传进来,我们让它解析上一串值,在控制台打印一下解析的字符串,字符串是什么呢?好,我们来启动容器,启动容器呢,我们把这个read我们加在IOC容器中,我们创建read对象,Read对象要用的其他组件都会以这种接口方法回调的方式传入进来,哎,我们可以来看一看。
07:17
好,来测试。测试呢,我们来看测试方法,测试方法来打印,我们来看read b的名字叫read,诶没问题,解析的字符串,哎大家看也是没问题的,你好,WINDOWS10,哎我们这个OS就是十,哎我是360360是吧,好,我们这是算出来的结果,包括呢,传入的IC容器,哎,Application conest哎7756,这个呢,就是我们在外边测试类用的LC容器,我来可以给大家看一看,我们在这测试,哎我我们呢也把这个测试的这个IC容器给大家来打印一下。好,我们来看走。
08:02
说呢,我们这个自动注入的LC容器,我们来看我们注入的LC容器,传入的LC,它是756FD,跟我们后边打印的,哎,7756FD这是一样的,所以说呢,这就是我们最后一种方式,我们利用叉叉叉把spring中的自己底层的一些组件注入到我们B中啊,Spring底层啊一些组件注入到到我们这个自定义的,比这就是我们最后一种方式,叉叉叉aware,包括呢,我们来说的这个application contest aware。我们以前还说过啊,这个aware呢,它是利用applicationest aware processor来处理的,其他aware也类似,都会有相关的process来进行处理。
09:03
他们呢,其实都是我们这些后置处理器,哎,我们这个后置处理器的机制,以前呢,也讲过CTRC好,要说呢,这些叉叉叉玩。叉叉叉的功能。功能,我们是使用咱们这个,使用咱们这个叉叉叉process。来处理的,然后呢,每一个aware都有它自己对应的process,大家可以后来来看一看啊,比如我们这个applicationtest aware。就会有它对应的application contest process。那么这个后置处理器在创建完B以后,哎,他一看我们这个,并实现了相关的VR接口,就把相关的组件给我们传进来,这就是这些后置处理器的作用。
10:06
那么呢,我们就可以以applicationest process为例,我们来看一下是怎么给中把这个applicationest注入进来的,能给它打一个断点,然后呢,我们以debug的方式来运行。走好,现在呢,断点停在了我们这个给瑞的组件中,哎,调用这个set方法注入值的这个位置,这个LC applicationest已经传过来了,那么呢,我们看它的前一步,哎前面前面呢,这有一个叫application process post process没说呢,在这个方法我们看到了,这个方法呢,就是我们这个applicationtest aware processor,我们这个类的我们这个后置处理器,然后呢,它再调用北initialization,它是怎么调的呢?我们来注意一下当前的这个B应是我们的这个read,然后呢,它大概的判断了一下,我们这个read呢,是不是这个接口,或者是不是这个接口,或者是不是咱们这个接口application aware。
11:27
所以说呢,这有一些判断正好呢,我们就试这些接口,然后呢,我们来看,接下来呢,他在这儿除过做一些这些啊,咱们这个权限检查,看能不能访问我们这些方法外,还有这个啊,它会调用interfa这个方法呢,点一下就在下边这个方法调用就在下边我们这个B呢,是咱们这个瑞的对象。然后呢,我们来看他来判断这个对象是不是aware接口旗下的,如果是他判断是不是environment aware,那如果是environment aware,那就给我们把environment对象拿到调用set environment方法注入,如果是bed value reserve,这个呢,我们也试过,也就说呢,它用这个来注入我们这个ED value,包括呢,如果是resource application等等等,我们现在呢,是这个我们是实现了这个接口,那么实现了这个接口呢,那接下来它就把我们这个B转成这个接口,调用这个set方法,哎,所以说就相当于来到我们这一步,诶我们判断呢,疑是这个接口,它就调用这个set application的方法把我们IC进来,那么这个B在初始化的时候利用。
12:57
这处理器判断这个B是这个aware接口,然后呢,调用这个方法把组件传入过来,这就是我们的的这些原理。
我来说两句