• 欢迎来到Compiler网站,如果对网站内容感兴趣或者帮助到你,请为文章点赞,谢谢!

Spring 事件

java 奔跑的蜗牛 2个月前 (04-22) 49次浏览 0个评论 扫描二维码

Java事件/监听器编程模型

  • 设计模式 – 观察者模式扩展

    • 可观者对象 = Observable

    • 观察者 = Observer

  • 标准化接口

    • 事件对象 – EventObject

    • 事件监听器 – EventListener

面向接口的事件、监听器设计模式

  • 事件/监听器场景距离

    Java技术规范事件接口监听接口
    JavaBeansjava.beans.PropertyChangeEventjava.beans.PropertyChangeListener
    Java AWTjava.awt.event.MouseEventjava.awt.event.MouseListener
    Java Swingjavax.swing.event.MenuEventjavax.swing.event.MenuListener
    Java Preferencejava.util.prefs.PreferenceChangeEventjava.util.prefs.PreferenceChangeListener

面向注解的事件/监听器设计模式

Java技术规范事件注解监听器注解
Servlet 3.0+WebListener
JPA 1.0+@PostPersist
Java Common@PostConstruct
EJB 3.0+@PrePassive
JSF 2.0+@ListenerFor

Spring标准事件 – ApplicationEvent

  • Java标准事件 java.util.EventObject扩展

    • 扩展特性:事件发生时间戳

  • Spring应用上下文ApplicationEvent扩展 – ApplicationContextEvent

    • Spring应用上下文(ApplicationContext)作为事件源

    • 具体实现:

      • org.springframework.context.event.ContextClosedEvent

      • org.springframework.context.event.ContextRefreshedEvent

      • org.springframework.context.event.ContextStartedEvent

      • org.springframework.context.event.ContextStoppedEvent

基于接口的Spring事件监听器

  • Java 标准事件监听器 java.util.EventListener扩展

    • 扩展接口 – org.springframework.context.ApplicationListener

    • 设计特定:单一类型事件处理

    • 处理方法:onApplicationEvent(ApplicationEvent)

    • 事件类型:`org.springframework.context.ApplicationEvent

基于注解的Spring事件监听器

  • Spring注解 – @org.springframework.context.event.EventListener

    特性说明
    设计特点支持多ApplicationEvent类型,无需接口约束
    注解目标方法
    是否支持异步执行支持
    是否支持泛型事件类型支持
    是否支持顺序控制支持,配置@Order注解控制

    Spring事件发布器

    • 通过ApplicationEventPublisher发布Spring事件

      • 获取ApplicationEventPublisher

        • 依赖注入

    • 通过ApplicationEventMulticaster发布Spring事件

      • 获取ApplicationEventMulticaster

        • 依赖注入

        • 依赖查找

    Spring层次性上下文事件传播

    • 发生说明

      当Spring应用出现多层次Spring应用上下文时,如Spring MVC, Spring Boot或Spring Cloud场景下,由子ApplicationContext发起Spring事件可能会传递到其Parent ApplicationContext的过程

    • 如何避免

      • 定位Spring事件源进行过滤处理

Spring内建事件

  • AppplicationContextEvent 派生事件

    • ContextRefreshedEvent: Spring 应用上下文就绪事件

    • ContextStartedEvent

    • ContextStopedEvent

    • ContextClosedEvent

Spring 4.2 Payload事件

  • Spring Payload事件 – PayloadApplicationEvent

    • 使用场景:简化Spring事件发送,关注事件源主题

    • 发送方法

      • ApplicationEventPublisher.publishEvent()

依赖查找ApplicationEventMulticaster

  • 查找条件

    • Bean名称: applicationEventMulticaster

    • Bean类型:ApplicationEventMulticaster

同步和异步Spring事件广播

  • 基于实现类 = SimpleApplicationEventMulticaster

    • 切换模式: setTaskExecutor(Executor)方法

      • 默认模式:同步

      • 异步模式: ThreadPoolExecutor

    • 设计缺陷:

      • 非基于接口契约编程

  • 基于注解 – EventListener

    • 模式切换

      • 模式模式:同步

      • 异步标注: @org.springframework.scheduling.annotation.Async

    • 实现限制:无法直接实现同步/异步动态切换

Spring 4.1 事件异常处理

  • Spring 3.0 错误处理接口 – org.springframework.util.ErrorHandler

    • 使用场景

      • Spring 事件

        • SimpleApplicationEventMulticaster – Spring 4.1开始支持

      • Spring 本地调度(scheduling)

        • org.springframework.sheduling.concurrent.ConcurrentTaskScheduler

        • org.springframework.sheduling.concurrent.ThreadPoolTaskScheduler

Spring 事件/监听器实现原理

  • 核心类 – org.springframework.context.event.SimpleApplicationEventMulticaster

    • 设计模式:观察模式扩展

    • 执行模式:同步/异步

    • 异常处理:ErrorHandler

    • 泛型处理:ResolvableType


Compiler编程笔记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Spring 事件
喜欢 (1)
[阳光路上]
分享 (0)
发表我的评论
取消评论
表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址