news 2026/5/8 13:33:30

LiteFlow 框架分析系列(四):Spring Boot 集成原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LiteFlow 框架分析系列(四):Spring Boot 集成原理

LiteFlow 框架分析系列(四):Spring Boot 集成原理

请关注公众号【碳硅化合物AI】

摘要

LiteFlow 对 Spring Boot 的支持可谓是“开箱即用”。你只需要引入 starter 依赖,配置好规则文件,就能直接在代码里注入FlowExecutor使用了。这背后发生了什么?本篇将深入源码,分析 LiteFlow 是如何借力 Spring Boot 的自动装配和生命周期管理的。

1. 自动装配入口

一切的起点都在liteflow-spring-boot-starter包中。遵循 Spring Boot 的规范,spring.factories(或 Spring Boot 3 的org.springframework.boot.autoconfigure.AutoConfiguration.imports)指向了自动配置类。

核心配置类是LiteflowMainAutoConfiguration

@Configuration@AutoConfigureAfter({LiteflowPropertyAutoConfiguration.class})@ConditionalOnBean(LiteflowConfig.class)@ConditionalOnProperty(prefix="liteflow",name="enable",havingValue="true")@Import(SpringAware.class)publicclassLiteflowMainAutoConfiguration{// 1. 注册 FlowExecutor@Bean@ConditionalOnMissingBeanpublicFlowExecutorflowExecutor(LiteflowConfigliteflowConfig,SpringAwarespringAware){FlowExecutorflowExecutor=newFlowExecutor();flowExecutor.setLiteflowConfig(liteflowConfig);returnflowExecutor;}// 2. 注册组件扫描器@BeanpublicComponentScannercomponentScanner(LiteflowConfigliteflowConfig,SpringAwarespringAware){returnnewComponentScanner(liteflowConfig);}// 3. 注册初始化触发器@BeanpublicLiteflowExecutorInitliteflowExecutorInit(FlowExecutorflowExecutor){returnnewLiteflowExecutorInit(flowExecutor);}}

这里有三个关键 Bean,我们一一解析。

2. 组件扫描:ComponentScanner

你在 Spring Bean 上加了@LiteflowComponent,LiteFlow 是怎么知道的?全靠ComponentScanner

它实现了 Spring 的BeanPostProcessor接口:

publicclassComponentScannerimplementsBeanPostProcessor{@OverridepublicObjectpostProcessAfterInitialization(Objectbean,StringbeanName)throwsBeansException{// 获取 Bean 的原始 Class(处理被 AOP 代理的情况)Classclazz=LiteFlowProxyUtil.getUserClass(bean.getClass());// 判断是否是 LiteFlow 组件(检查注解或继承关系)// ... (LiteflowScannerProcessStepFactory 逻辑)// 如果是,则注册到 LiteFlow 的 FlowBus 中// ...returnbean;}}

原理解析
当 Spring 容器初始化完一个 Bean 后,ComponentScanner会介入检查。如果这个 Bean 是 LiteFlow 的组件,它就会提取nodeIdname等信息,并将其注册到 LiteFlow 的元数据中心FlowBus里。

这也解释了为什么 LiteFlow 的组件可以无缝使用 Spring 的@Autowired等特性——因为它们本身就是 Spring 容器管理的 Bean。

3. 启动初始化:LiteflowExecutorInit

规则文件什么时候解析?流程链什么时候构建?答案是在 Spring 容器启动完成之后。

LiteflowExecutorInit实现了SmartInitializingSingleton接口:

publicclassLiteflowExecutorInitimplementsSmartInitializingSingleton{privatefinalFlowExecutorflowExecutor;@OverridepublicvoidafterSingletonsInstantiated(){// 触发 LiteFlow 的初始化流程flowExecutor.init(true);}}

afterSingletonsInstantiated方法会在所有单例 Bean 都创建完成之后被调用。这是一个绝佳的时机:

  1. 依赖就绪:此时所有的组件 Bean 都已经扫描并创建好了。
  2. 避免死锁:避免在 Bean 创建过程中触发复杂的解析逻辑。

调用flowExecutor.init(true)后,LiteFlow 开始解析规则文件,构建 Chain,并将其与之前扫描到的 Node 关联起来,最终完成启动。

4. 时序图

5. 总结

LiteFlow 集成 Spring Boot 的思路非常清晰:

  1. 利用 AutoConfiguration自动配置核心组件。
  2. 利用 BeanPostProcessor抓取用户定义的组件 Bean。
  3. 利用 SmartInitializingSingleton在 Spring 启动末期触发规则解析。

这种深度集成使得开发者几乎感知不到 LiteFlow 的存在,专注于写组件逻辑和规则文件即可,真正做到了“无侵入”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 17:54:06

21、深入探索RxCpp自定义操作符与设计模式

深入探索RxCpp自定义操作符与设计模式 1. RxCpp自定义操作符的创建 在RxCpp中,每个操作符都定义在 rxcpp::operators 命名空间下。为了展示如何从头开始实现一个操作符,我们复制了 map 操作符的实现,创建了一个名为 eval 的新操作符,其语义与 map 操作符相同。 …

作者头像 李华
网站建设 2026/5/1 21:00:58

25、使用 C++ 构建响应式微服务与错误处理

使用 C++ 构建响应式微服务与错误处理 1. 响应式微服务架构概述 微服务架构是近年来兴起的一种软件设计方式,它将应用程序设计为一组可独立部署的服务套件。虽然没有精确的定义,但通常具有围绕业务能力组织、自动化部署、端点智能化以及语言和数据的分散控制等特点。 在 C…

作者头像 李华
网站建设 2026/5/2 7:08:35

MusicFree智能缓存技术:让你的音乐永远在线

"地铁里听歌又卡住了?" "电梯里音乐突然中断?" 这些让人抓狂的瞬间,MusicFree的智能缓存技术正在悄悄解决。作为一个完全开源的音乐播放器,MusicFree通过创新的媒体缓存机制,让音乐播放摆脱网络束…

作者头像 李华
网站建设 2026/4/25 10:09:38

37、在线分析处理与多维数据库操作指南

在线分析处理与多维数据库操作指南 1. 在线分析处理(OLAP)概述 在线分析处理(OLAP)是一种交互式分析存储在多维数据仓库中的业务交易数据的活动,旨在做出战术和战略业务决策。通常进行 OLAP 工作的人员包括业务分析师、业务经理和高管。 例如,通过衡量某一时期的销售增…

作者头像 李华
网站建设 2026/5/2 0:05:21

43、客户关系管理中的数据仓库应用

客户关系管理中的数据仓库应用 1. 表结构创建 在数据管理中,首先创建了两个基础表: create table dim_subscription_status ( subscription_status_key int not null,subscription_status_code char(2),description varchar(50),source_system_code …

作者头像 李华
网站建设 2026/5/6 19:20:25

机器人研发面试指南与参考答案——针对卓世科技机器人应用开发工程师

卓世科技 机器人应用开发工程师 职位描述 岗位职责 1. 负责 ROS2 + DDS 框架下的机器人通信架构设计和优化。 2. 开发和维护 机器人控制、感知、规划等模块,确保实时性和高可靠性。 3. 研究 DDS 传输优化(QoS 调优、共享内存、UDP 传输)以提高机器人通信效率。 4. 解决 跨设…

作者头像 李华