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」异步编程机制以及功能分析讲解

SpringBoot技术专题「权限校验专区」Shiro整合JWT授权和认证实现

SpringBoot技术专题「StateMachine」StateMachine状态机设计及实现开发学习指南