00:00
好,前面呢,我们说了一下咱们这个监听器的事件监听以及事件发布的这个原理,那么事件监听呢,我们可以来实现application listener,咱们这个接口,当然还有另外一种方式,我们来提一下,这种方式呢,就是我们可以来使用这个疑问,你问listen呢?注解,我们可以让任意方法都能坚定时间,这样的话呢,啊,我们在一个呃,普通的业务逻辑组件中,我们直接用这个方法,而不是实现接口,比如我们来举一个例子,比如呢,我们有一个组件叫user service这个组件,这个组件里边呢,我们有其他的这个方法,哎,我们是一个service,除了有其他的方法外呢,我们还希望他能监听到事件,那么怎么办呢?哎,我们就来写一个lesson啊,我们就让这个方法来。
01:00
监听事件,那么我们只需要简单的来给这个方法上标一个event listen,那么它就能监听事件了,那到底要监听哪些事件,我们可以在这用class给他指定,那我们就让他来监听application event,哎,就来我们监听这个下面的所有事件,包括呢,我们这个事件监听我们可以写多个,哎问监听什么事件,包括离开疑问或者呢,还有什么事件等等等等们都可以写多个,但是这个事件一旦发生以后,我们要拿到事件,那我们就给参数位置也写一个不event,这样呢就能拿到时间,这就是我们一个普通的业务逻辑组走来输出,然后呢,我们这个user service,它也能监定时间,监听到达时间,时间那么呢们。
02:00
打印一下这个event,跟我们来实现listen接口效果是一样的,我们可以进行测试。测试走我们来看控制台,那么user service也收拾到时间,包括我们这些东西,哎,也收到时间,就是说每一个呢都能正确的收到时件,那么呢,我们后来呢,对于这个注解的使用也比较多,因为它毕竟非常方便,那这个注解呢,它后边的这个原理我们得说一下,这个注解呢们来点过去,我们来看这个注解呢,它上边有批注,这个注解是怎么完成的,他说呢,你可以来看一下我们这个process,他是用这个process用这个处理来解这个listen注解的,我们主要说一下它listen它的原理,它的原理呢,是使用这个使用使用咱们这个处理器,处理器来解析我们这个方法上的。
03:11
你问他你从哪儿住去,你问他你从哪儿住下的,那么我们就来看一下这个处理器,这个处理器时工作呢,我们来点过去,我们来看啊,它实现了一个接口叫smart initialization,这个接口是我们要说的一个原理,要说呢,那主要呢来说这个接口的原就是碳,那么这个接口呢,我们来点进去,当它规定了一个方法叫after singles,这个方法什么时候执行呢?他说它会在我们这个N的偶当我们这个单实力并应已经全部创建完成。这个阶段之后,也就是说它的意味着所有的单式利宾已经全部被创建完了,也就是说在这个时候会来执行,类似于什么呢?我们来看它前面,前面他介绍这个类的时候,我们这个接口在它会触发在单实例的所有B都已经全部创建完成以后来会进行处罚,就说你看啊,在这个初始化之后进行处罚,这个呢,他说类似于什么呢?啊,他下面说,哎,我们这个调用时机呢,就类似于我们这个contest re的event,类似于我们这个容器刷新啊完成就说相当于你这个容器已经创建完了,那我们来看一下它的这个触发时机,我呢就给它这打一个断点,看一下它到底是什么时候出发,哎,我们来,哎,来到这。
04:50
好,我们来给这这个方法,我们来打一个断点,我们以debug的方式运行走,好,现在呢,来到这个方法了,那我们来看它是什么时候出发的,好,LC容器创建来记录一下。
05:07
IOC容器创建对象创建创建对象,创建对象这是第一步,第二步我们容器创建对象的时候呢,我们要调用进行新容器创建对象并新容。并咱们这个我们要刷新容器,而刷新容器则接下来怎么做呢?我们这有一个叫finish being factory initialization完成being factory的初始化工作,这我们之前看过,它是呢初始化所有剩下的这些单式利。这一步我初始化剩下的单式利B,比方说还有一些B啊,还没初始化,还没创建对象,它在这一步进行,那么我们来继续来看它这呢,有一个普,哎,还是一样初始化所有的单式利比它调这个方法,调这个方法进来以后呢,我们来看他在这调smart s after来调这个方法,这个方法合调注意。
06:21
它是在这个for循环,这个for循环里边呢,B names就是呢,我们要创建的所有的组件,组件的名字,这个组件的名我们创建完了以后呢,它把这个组件的对象拿来判断我们这个对象是不是实现了smartization这个接口,我说呢,哎,它是在这在这便历,但是这是什么时候呢,我们来注意往前看。往前看,诶这前面呢,我们以前说过,这是呢,即将要创建的所有的B的名,哎在这,然后呢,他在这判断比影是不是抽象的,是不是单式例的等等,最终呢,都会调用get和比影方法创建对象,也就是说整个先会调用一个for循环来创建所有的单式力,并应全部创建完以后,再调一个for循环,把这些单式力并应对象拿到,判断是不是这个类型的,如果是调用它们的方法,所以呢,它是两步,第一步先创建,先创建所有的单实例B,比如说呢,这个创建呢,就是它是利用一个for循环拿到所有我们要创建的宾,通过get宾的方式,前边呢是在创建宾,创建所有的单式利宾调用。
07:48
给他兵方法创建,那么接下来呢,是来调用,是来调用所有的单实力病都创建完以后,哎,他呢,又是移动变历,把所有的比拿来,从我们这个创建好的比里边来获取,把咱们这个比对象拿来啊,又是一获取所有创建好的单实例比判断判断。
08:15
判的是否是,是否是,是否是我们这个smart initialization接口是不是这个类型的,如果是果是就调用,就调用什么呢,就调用我们这个after single single initial方法,也就是我们这个接口规定的这个方法,这个方法呢就在这个,哎,它规定了一个这个方法,这个方法呢,就是在所有单式力并全创建完成以后调用,包括呢,大家可以来看,如果说我们所有的单实力毕竟都创建完了。我们在这儿这一步都创建完了,那说明IC容器已经创建完成了,那接下来就是finish的容器创建完,创建完以后呢,它发布容器已经刷新完的时间,哎,这就类似于我们在容器刷新完以后会被调用这个方法,这就是我们着重要说的initial原理,我们通过使用这个listener接口,我们顺便说一下咱们这个啊,Smart没ization。
我来说两句