码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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。

     

     

     

  • 相关阅读:
    脑机接口的商业化道路,还要走多远多长?
    mybatis-plus实现多租户Saas
    Spring&SpringMVC&SpringBoor
    C++阶段复习‘‘‘‘总结?【4w字。。。】
    js基础笔记学习317练习3
    计算机网络——网络层数据交换方式、IP数据报、IPv4地址、重要协议、IPv6
    高新技术企业认定工作指导
    c语言常见字符函数、内存函数(详讲)
    datagrid获得选中行的id
    NFT Insider #75:The Sandbox 为Avatar 打造特别活动,Ambire 团队发起第一次官方治理投票
  • 原文地址:https://blog.csdn.net/ke1ying/article/details/127780075
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号