如何使用UML表示Spring Boot事件发布下类间的非直接方法调用交互
Spring 事件交互的UML表示方案
核心建模原则
不要在事件发布类和事件处理类之间绘制直接依赖或关联箭头——二者在代码层面完全无直接编译期引用,所有的耦合逻辑都由Spring框架提供的ApplicationEventPublisher作为中介完成,建模时要把这个中介的作用显性化。
不同UML图的具体绘制方式
类图层面
- 为
Publisher类补充关联属性:明确标注它持有ApplicationEventPublisher类型的springPublisher实例,提供publishEvent方法作为事件发起入口 - 为
EventHandler类补充方法标记:在handleEvent方法旁用注释标注@EventListener的注解作用,说明该方法会被Spring的事件机制匹配触发 - 单独把Spring上下文提供的
ApplicationEventPublisher事件路由组件作为独立建模元素,建立两条依赖关系:- 被
Publisher类调用,提供事件发布能力 - 作为路由中枢,在事件发布后自动匹配并触发所有符合参数规则的监听方法
- 被
- 绝对避免直接在
Publisher和EventHandler之间绘制连线,这种画法不符合代码的实际依赖关系,会误导后续维护者
时序图层面
按实际运行的交互顺序排列生命线,不要省略中介节点:
- 第一条调用线:
Publisher→ApplicationEventPublisher,标注调用publishEvent(new SomeEvent()),传递自定义的事件实例 - 第二条调用线:
ApplicationEventPublisher→EventHandler,标注框架自动完成的注解匹配逻辑,触发handleEvent(对应事件实例)方法 - 可以在两条调用线之间添加虚线备注:该路由过程由Spring框架在运行时基于注解扫描自动完成,无跨类的直接代码依赖
轻量简化画法
如果是面向非技术相关方的业务沟通场景,不需要把ApplicationEventPublisher画成单独的实体类,可以用UML的笔记元素框,在Publisher和EventHandler的交互关系处标注说明:二者通过Spring事件机制完成解耦交互,没有直接方法调用。
内容的提问来源于stack exchange,提问作者Valeriy K.
相关产品推荐
相关产品推荐

