00:00
好,前面呢,我们大概说了一下3.0规范里边的一些简单注解,利用它们来注册等组件,当这个注解呢,不是我们说的重点,因为毕竟我们原生的这个开发场景用的还是比较少的,我们来主要来说一个8.2章节叫plugability插件能力,在它的最后一个小节,我们从8.3往上看,最后一个小节呢,有一个重要的机制叫shared libraries和run,如我们这个叫共享库和运行时插件能力,这个机制呢,在后来我们这个框架整合里边,哎,也用的非常多,所以呢,我们来说一下它。好,这个呢,我们可以翻译为叫共享库。共享库以及运行式插件插件那呢,我们在这个章节里边,它的这个机制非常重要,那么我们来可以看一下文档的描述,在文档的啊,大概第二段他呢会说啊,咱们这个container在启动我们这个应用,这些container呢,就指我们这些容器,比如Tom k之类的,在启动我们这个应用的时候呢,它会来扫描,哎,我们这个包里边的这个container时的这个实现,先来说上第一点叫我们这个容器启动。
01:35
容器启动会扫描,然后呢,我们当前应用,当前应用应用里边每一个炸包的咱们这个东西的实现,它是怎么个扫描办法呢?我们可以看一下啊,然后它是这样扫描的,如果说我们提供了一个这个container initial LA,翻译过来就叫solid容器的初始化器的实现类,那么好,那说呢,如果我们这个提供提供它的咱们这个实现类提供了这个时间类还不行,然后呢,我们提供完这个时间类,必须呢,绑定在这个目录下边呢,有一个文件名字叫我们这个Java X这个里边啊,我们说它的这个实类。
02:32
啊,也就是说呢,我们这个时间类必须绑定在,必须绑定在这儿下边呢,有一个文件,它下边呢,有一个这个文件。比绑定在这怎么个绑定办法呢?哎,它是这么来说的,就是说呢,咱们这个文件的这个内容,我们这个文件呢,就来指向我们container initial的这个实现,所以呢,我们这个在这文件的内容就是咱们这个solid container initial实现类的权威名,哎那么它的这个机制我们总结翻译过来呢,意思就是说我们这个容器,容器在启动应用的时候,应用的时候会扫描到会扫描啊当前应用每一个炸包里边,包里面我们这个东西指定的时线类,它指定的咱们这个啊时线类,然后呢,启动并运行启动。
03:47
并运行这个实现类,实现类啊方法,那么这个我们就来测试一下,我们呢,来也写一个,我们这个叫container initial,好,比如呢,我来写一个类,我叫my so container initial就来实现。
04:10
Container接口点开两个,那么呢,这个东西呢,一定要按照人家要求,我们把这个类名我们配在哎,人家指定的这个目录,那么这个目录呢,我们就在我也不写炸包了,我就在当前项目的这个类路径下把这个目录创建出来啊,如果呢,大家来写包给包的类路径下来创建这个目录也是一样的效果好,这个目录下会有这么一个文件,创建一个这个文件。好,这个文件名呢,就叫这个没什工后缀名,好我们点一个分式,那么这个文件里边的内容,按照人家的这个要求,就是我们这个实现类的权类名,它复制过来,复制过来这样的话呢,他会说在我们这个应用一启动的时候,就会找到你的这个时间类并来运行它,那这个时现类运行什么方法呢?哎,我们会发现这就有一个叫on start up,它就是在应用启动的时候的时候,咱们这个会运行咱们这个on start up方法,那么这个方法里边呢,关键有两个参数,第一个参数叫solid contest的对象,这个呢,啊,我们已经很熟悉了,这是一个web应用,哎,代表它是用来代表当前,代表当前web应用的solid contextest对象,哎,一个web应用一个一个。
05:44
Web应用相当于呢,就对应一个,这也是我们这个说的APPLICATION4大域对象之一,哎,我们这个给它里边存的这个东西应用在不关闭之前,我们都可以在任何位置取得到,好,这个呢我就不说了,主要呢,有一个它叫set集合的这个类型,这是什么呢?在文档里边也有说明,在文档里边呢,说我们这个container initial也可以来使用一个注解,这个注解呢叫handle steps,我们叫handle steps,整一下叫handles types,哎,我们有这么一个注解,这个注解里边呢,会来写我们这个类型的数组,哎,相当于它等于你来指定各种类型这一块的这个注解的作用就是相当于你这个容器启动的时候。
06:44
的时候,会将咱们这个handle types指定的这些类型,指定的这个类型下边的咱们这个子类,包括实线类,实现类或者子接口等,把这些它下边的这些类全部传递过来。
07:08
这相当于呢,我们来在这写一个我们感兴趣的类型,比如我们来自己来写一个类型,好我们就叫hello service,好我们就放在咱们这个service包行,这个service呢,我就给它整成接口。Interface,那我们把这个service我们来写在这里,我们就service点。哎,这相当于呢,我们传入,传入我们感兴趣的类型,传入感兴趣的类型呢,哎,它就会自动的将这个类型,它下边的所有的这些类都传递过来,那么这个set啊,就是它我们这个感兴趣的的类型的所有此类型啊,那么应该叫所有的这些后代类型,好那么呢,我就来给这个hello service,我来写上几个实现,诶比如我先来写一个接口叫hello service的ext,好,我们就来实现这个hello service接口啊我点个这呢,相当于我们创建了一个子接口,那我再来创建一个咱们这个抽象类,比如这个service,好,我们来添加hello service接口,哎,它也是实现这个接口下,但是它是一个抽象。
08:36
抽类,把这个它把雷好,把这个抽象的标志加上好,这是一个抽象类,我们再来给它创建一个实现吧,叫hello service的,也就说只要是hello service接口下的东西好,这个hello service接口下,我们就会由咱们这三种类型,这样呢,容器在一启动的时候,把这我们感兴趣的这些所有类型我们都能传递的过来,我可以输出一下感兴趣的类型。
09:12
感兴趣的咱们这个类型好,那么这个类型呢,我们来便利一下,让他在控制台进行打印C4OUT。哎,Class,好,我把这个类型在这打印一下,这是我们这个啊set集合,那么这个对象我们就不用了,那现在呢,来启动我们这个项目,来看一下控制台。会不会有我们这个感兴趣的类型。好,启动起来,我们看控制台感兴趣的类型,除过hello service,我们指定的这个接口,比就说我们感兴趣的这个类型本身不用它下边的这些子类型,哎,我们这些抽象类也好,子接口也好,实现类也好,都会给我们传递过来,这样的话呢,如果我们感兴趣某一个类型,我们还可以在这用反射给它创建对象啊,或者怎么办等等等等,这是我们这个感兴趣的类型,这是我们这个基于我们这个运行时插件的这个机制,哎,这个机制呢,最重要的就是启动和启动咱们这个时间类,然后呢,而且也能能接收啊传入它会传入我们这个感兴趣的类型啊,兴趣的类型在这个规则里边呢,啊有两个核心,一个叫container,还有咱们这个handle主解这个。
10:47
机制呢,我们先放到这儿,它的这个使用呢,我们会在整合spring mvc的时候也给大家来用到。
我来说两句