SpringBoot技术专题-StateMachine状态机设计
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot技术专题-StateMachine状态机设计相关的知识,希望对你有一定的参考价值。
参考技术A下面是状态机模型中的4个要素,即现态、条件、动作、次态。
状态机中,每个状态有着相应的行为,随着行为的触发来切换状态。其中一种做法是使用二维数组实现状态机机制,其中横坐标表示行为,纵坐标表示状态,具体的数值则表示当前的状态。
我们以登录场景设计一个状态机。
设计一张状态机表。
横轴是动作,纵轴是状态
此时它的二维数组,如下所示
定义一个环境类,它是实际上是真正拥有状态的对象。
状态模式用类表示状态,这样就能通过切换类来方便地改变对象的状态。我们定义几个状态类。
注意的是,如果某个行为不会触发状态的变化,我们可以抛出一个 RuntimeException 异常。此外,调用时,通过环境类控制状态的切换,如下所示。
Spring StateMachine 让状态机结构更加层次化,可以帮助开发者简化状态机的开发过程。现在,我们来用 Spring StateMachine 进行改造。修改 pom 文件,添加 Maven/gradle 依赖。
定义一个状态枚举,其中包括未连接、已连接、注册中、已注册 4 种状态。
定义事件枚举,事件的发生触发状态转换
配置状态机,通过注解打开状态机功能。
配置类一般要继承EnumStateMachineConfigurerAdapter类,并且重写一些configure方法以配置状态机的初始状态以及事件与状态转移的联系。
在启动springboot时,需要注入状态机的状态,事件的配置。起主要涉及到以下两个类:
配置事件监听器,事件发生时会触发的操作
通过注解自动装配一个状态机
这里写了一个rest接口来触发状态机变化
Spring StateMachine 让状态机结构更加层次化,我们来回顾下几个核心步骤:
为了方便扩展更多的Listener,以及管理Listeners和Interceptors。可以定义一个基于状态机实例的Handler: PersistStateMachineHandler,以及持久化实体的监听器OrderPersistStateChangeListener如下:
监听器的Handler以及接口定义PersistStateMachineHandler:
持久化状态发生变化的订单实体的Listener实现类OrderPersistStateChangeListener:
Springboot注入Handler和Listener bean的Configuration类,OrderPersistHandlerConfig
订单服务的Controller&Service示例
示例提供了两个简单的接口,一个是查看所有订单列表,一个是改变一个订单的状态。
Controller如下OrderController:
订单服务类OrderStateService:
SpringBoot 企业级核心技术学习专题
专题 | 专题名称 | 专题描述 |
---|---|---|
001 | Spring Boot 核心技术 | 讲解SpringBoot一些企业级层面的核心组件 |
002 | Spring Boot 核心技术章节源码 | Spring Boot 核心技术简书每一篇文章码云对应源码 |
003 | Spring Cloud 核心技术 | 对Spring Cloud核心技术全面讲解 |
004 | Spring Cloud 核心技术章节源码 | Spring Cloud 核心技术简书每一篇文章对应源码 |
005 | QueryDSL 核心技术 | 全面讲解QueryDSL核心技术以及基于SpringBoot整合SpringDataJPA |
006 | SpringDataJPA 核心技术 | 全面讲解SpringDataJPA核心技术 |
007 | SpringBoot核心技术学习目录 | SpringBoot系统的学习目录,敬请关注点赞!!! |
SpringBoot学习目录
https://www.jianshu.com/p/9a08417e4e84
以上是关于SpringBoot技术专题-StateMachine状态机设计的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot技术专题「开发实战系列」一起搭建属于自己的SpringBoot Admin的技术要素
SpringBoot技术专题「开发实战系列」全面梳理和分析一下相关的Web核心配置
SpringBoot技术专题「Tomcat技术专区」用正确的姿势如何用外置tomcat配置
SpringBoot技术专题「Async&Future」异步编程机制以及功能分析讲解