Spring监听器-spring源码详解(五)

前面说了spring循环依赖:

Spring循环依赖-spring源码详解(四)

前面介绍了springIOC在上面那个方法里实现,那么下面这个方法里实现了什么呢?在springBean创建完之后的扩展代码。

contextRefreshEvent事件监听上下文初始化方法。

 

 

当我们想在容器结束的时候进行扩展,就可以写一个监听器,监听contextClosedEvent事件。

监听事件可以通过@component基于接口实现applicationListener,泛型传入需要监听的事件。

也可以通过注解,@EventListener(事件)

Spring事件监听器有三个部分组成:

事件(applicationEvent):事件一发布。

监听器(applicationListener):观察者 则监听到 ,做一些事。

事件发布器(applicationEventMulticaster):发布事件。

 

 

从第一个方法里可以看到,这里把容器激活,因为在后面getBean方法的时候,会断言容器必须是激活状态,才会执行初始化bean。

这里有一个早期监听器,不需要手动调用publicEvet。

 

ClassPathXmlApplicationContext在这里就会通过loadBeanDefinitions来加载bean。

AnnocationApplicationContext在这里则是设置了序列化id。

下面则开始对bean工厂进行填充,这里注册了加载器,

注册了applicationContextAwareProcessor。

这里会在beanPostProcessorBeforeInitialization调用。

这里还注册了applicationContext、beanFactory等。

后面则就注册了事件监听的后置处理器ApplicationlistenerDetector解析(接口监听器)。

监听器则是在beanPostProcessorAtferInitialization调用。

 

 

后面这里就到了事件多播器,当自己自己定义了applicationEventMulticaster的时候,则就创建。

没有则创建一个simpleApplicationEventMulticaster。

当调用publicEvent的时候,则就会调用事件多播器去广播所有事件。这里会管理所有的监听器。

在后面一张图就是 registerListeners。

这里getBeanNamesForType是注解的方式获取 监听器,接口的方式则获取不到。

现获取早期事件,这里将早期的时间赋值null,则没有早期事件了。也就不会自动广播了,全部通过多播器广播。

于是最后就到了我们文章开头发的publicEvent。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端从入门到精通

你的鼓励是我最大的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值