码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 浅析 spring 事件驱动


    1、ApplicationContext.publishEvent 同步还是异步,为什么 ?

    先说结论:默认情况下同步的,即事件发布者会阻塞等待事件处理完成。这是因为Spring的设计初衷是为了保证事件的有序处理和事务的一致性。

    看下代码实现:

    1. public void multicastEvent(final ApplicationEvent event, @Nullable ResolvableType eventType) {
    2. ResolvableType type = (eventType != null ? eventType : resolveDefaultEventType(event));
    3. Executor executor = getTaskExecutor();
    4. for (ApplicationListener listener : getApplicationListeners(event, type)) {
    5. if (executor != null) {
    6. executor.execute(() -> invokeListener(listener, event));
    7. }
    8. else {
    9. invokeListener(listener, event);
    10. }
    11. }
    12. }

    getTaskExecutor() 默认:org.springframework.core.task.SyncTaskExecutor 

    事件发布时遍历所有注册的监听器,调用每个监听器onApplicationEvent 方法进行事件处理

    同步怎么改成异步呢?

    配置异步任务执行器(AsyncTaskExecutor),将 ApplicationListener 方法执行改为异步执行

    1. @Async // 声明异步执行
    2. @Override
    3. public void onApplicationEvent(CustomEvent event) {
    4. // 异步处理事件
    5. }
    事件驱动带来的好处是什么?

    1、松耦合:组件之间的通信通过事件进行,减少了直接依赖关系,提高了系统的灵活性和可扩展性。

    2、可扩展性:通过定义事件和监听器接口,可以方便地添加新的事件和监听器,扩展系统的功能。

    3、可维护性:事件驱动机制使代码的逻辑结构更清晰,易于理解和维护。

    4、模块化开发:不同模块可以独立定义和实现自己的事件监听器,支持模块化开发和组装。

  • 相关阅读:
    逻辑回归(Logistic Regression)
    Gbase8s数据库ALTER PROCEDURE 语句
    Redis 的 RDB 和 AOF
    【图像边缘检测】基于matlab自适应阈值的八方向和四方向sobel图像边缘检测【含Matlab源码 2058期】
    3个g的文件怎么发送给别人?三种方法自由选择!
    一键下载慕课网/网易云课堂/中国大学/学习通/爱课程/学堂在线等课程视频和课件
    antd 表格getCheckboxProps禁用
    Nginx 负载均衡
    CPT-mPEG/RGD/cRGD/BSA 甲氧基聚乙二醇/RGD/cRGD多肽/牛血清蛋白修饰顺铂
    贪心算法练习
  • 原文地址:https://blog.csdn.net/qq_27789551/article/details/132907579
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号