绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Spring监听器-spring源码详解(五)
2023-02-08 10:12:04

上篇文章说了:

前面介绍了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。


分享好友

分享这个小栈给你的朋友们,一起进步吧。

MySQL干货资料
创建时间:2020-05-06 14:18:32
每天都有干货输出哦
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~