news 2026/4/24 20:29:45

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/4/24 20:11:02

23、C++ 响应式编程与微服务开发

C++ 响应式编程与微服务开发 1. C++ 响应式编程基础 在响应式编程中,我们可以通过一些特定的步骤来构建基本的程序。在主函数中,一般会执行以下任务: 1. 创建 EventBus<T> 的实例。 2. 创建生产者(Producers)的实例。 3. 创建消费者(Consumers)的实例。 4…

作者头像 李华
网站建设 2026/4/23 19:05:34

24、C++ 中的反应式微服务开发:JSON、REST 服务与 RxCurl 库的应用

C++ 中的反应式微服务开发:JSON、REST 服务与 RxCurl 库的应用 1. 从 URL 获取 HTML 内容 在 C++ 中,我们可以通过以下代码实现对 URL 的阻塞调用并获取 HTML 内容: observable<string> response_message; request.as_blocking().subscribe([&] (observable…

作者头像 李华
网站建设 2026/4/17 17:54:07

计算机毕设java出租车服务管理信息系统 基于Java的出租车运营管理信息化平台设计与实现 Java技术驱动的出租车服务管理系统开发与应用

计算机毕设java出租车服务管理信息系统01nn59&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着城市化进程的加速&#xff0c;出租车作为城市交通的重要组成部分&#xff0c;在…

作者头像 李华
网站建设 2026/4/21 7:22:13

40、商业智能应用:预测、仪表盘、警报与门户的全面解析

商业智能应用:预测、仪表盘、警报与门户的全面解析 1. 预测输出设置与结果查看 在进行预测输出时,图底部表格的行对应着我们希望在预测输出中显示的列。以特定场景为例,我们期望在预测输出中展示三列内容:客户键、音乐以及预测概率。 - 第一行表示在输出中显示 dm_purc…

作者头像 李华
网站建设 2026/4/22 13:23:16

深度解析神经网络损失景观可视化:从理论到实践的全方位指南

在神经网络训练过程中&#xff0c;你是否曾好奇过损失函数在参数空间中的真实形态&#xff1f;损失景观可视化技术正是揭开这一谜题的关键工具&#xff0c;它让我们能够直观地观察和理解模型优化的复杂过程。 【免费下载链接】loss-landscape Code for visualizing the loss la…

作者头像 李华