当前位置: 首页 > news >正文

技术周总结 01.13~01.19 周日(Spring Visual Studio git)

文章目录

  • 一、01.14 周二
    • 1.1)问题01:Spring的org.springframework.statemachine.StateMachine 是什么,怎么使用?:
      • 如何使用`StateMachine`:
    • 1.2)问题02:Spring StateMachine 提供了一系列高级特性
  • 二、01.16 周四
    • 2.1)问题01:windows中的 git GUI中打开文件中文乱码怎么处理,git bash打开的中文不乱码
    • 2.2)问题02:Visual Studio 有哪些使用技巧
    • 2.3)问题03: git fetch和 git pull的区别
    • 2.4) Visual Studio的使用教程

一、01.14 周二

1.1)问题01:Spring的org.springframework.statemachine.StateMachine 是什么,怎么使用?:

org.springframework.statemachine.StateMachine 是Spring框架中的一个组件,用于实现状态机的功能。状态机是一个抽象机器,它可以处于有限个状态之一。状态机可以根据触发的事件(transitions)从一个状态转移到另一个状态。

状态机通常用于实现具有明确状态和状态转换的系统,例如工作流引擎、订单管理系统、游戏控制逻辑等。Spring StateMachine 提供了一个框架,使得在Spring应用程序中实现状态机变得容易和直观。

如何使用StateMachine

  1. 定义状态和事件
    首先,你需要定义状态机可能处于的状态(State)以及可能触发转换的事件(Event)。这些通常通过枚举来实现。

    public enum States {STATE1, STATE2, STATE3
    }public enum Events {EVENT1, EVENT2, EVENT3
    }
    
  2. 配置状态机
    接下来,你需要配置状态机,定义状态之间的转换逻辑。这通常在配置类中完成,使用Spring StateMachine的配置适配器。

    @Configuration
    @EnableStateMachine
    public class StateMachineConfig extends EnumStateMachineConfigurerAdapter<States, Events> {@Overridepublic void configure(StateMachineStateConfigurer<States, Events> states)throws Exception {states.withStates().initial(States.STATE1).state(States.STATE2).end(States.STATE3);}@Overridepublic void configure(StateMachineTransitionConfigurer<States, Events> transitions)throws Exception {transitions.withExternal().source(States.STATE1).target(States.STATE2).event(Events.EVENT1).and().withExternal().source(States.STATE2).target(States.STATE3).event(Events.EVENT2);}
    }
    

    在这个配置中,我们定义了一个初始状态STATE1,以及在EVENT1发生时从STATE1转移到STATE2,以及在EVENT2发生时从STATE2转移到STATE3的转换。

  3. 使用状态机
    一旦状态机被配置,你可以在你的服务或组件中注入StateMachine对象,并使用它来管理状态。

    @Service
    public class MyService {@Autowiredprivate StateMachine<States, Events> stateMachine;public void doSomething() {stateMachine.start();stateMachine.sendEvent(Events.EVENT1);stateMachine.sendEvent(Events.EVENT2);stateMachine.stop();}
    }
    

    在这个服务中,我们启动状态机,发送事件来触发状态转换,并在完成后停止状态机。

Spring StateMachine还提供了许多高级特性,包括状态监听器、状态机持久化、状态机拦截器等。通过这些特性,你可以构建复杂的状态管理逻辑,以适应各种应用场景的需求。

1.2)问题02:Spring StateMachine 提供了一系列高级特性

Spring StateMachine 提供了一系列高级特性,可以帮助你更好地管理和扩展状态机的行为。下面是其中一些高级特性的详细说明:

  1. 状态监听器(State Listeners)
    状态监听器允许你在状态机的状态变化时执行自定义的逻辑。你可以监听状态的变化、事件的发生、以及转换的发生。通过实现 StateListenerAdapterStateMachineListener 接口,可以创建自己的监听器。

    @Override
    public void configure(StateMachineConfigurationConfigurer<States, Events> config)throws Exception {config.withConfiguration().listener(new StateMachineListenerAdapter<States, Events>() {@Overridepublic void stateChanged(State<States, Events> from, State<States, Events> to) {// 自定义逻辑}});
    }
    
  2. 状态机持久化(State Machine Persistence)
    状态机持久化允许你将状态机的状态存储在持久化存储(如数据库)中,这样即使应用程序重启,状态机也能恢复到之前的状态。Spring StateMachine 提供了持久化接口,你可以通过实现 StateMachinePersist 接口来自定义持久化逻辑。

    public class MyStateMachinePersist implements StateMachinePersist<States, Events, String> {// 实现读取和写入状态机的方法
    }
    
  3. 状态机拦截器(State Machine Interceptors)
    状态机拦截器可以在状态机转换发生之前或之后执行自定义逻辑。通过实现 StateMachineInterceptor 接口,可以拦截状态机的各种事件。

    @Override
    public void configure(StateMachineConfigurationConfigurer<States, Events> config)throws Exception {config.withConfiguration().withInterceptor(new StateMachineInterceptorAdapter<States, Events>() {@Overridepublic void preStateChange(State<States, Events> state, Message<Events> message,Transition<States, Events> transition, StateMachine<States, Events> stateMachine) {// 转换前的逻辑}});
    }
    
  4. 状态机区域(State Machine Regions)
    对于更复杂的场景,一个状态机可以分成多个区域(Region),每个区域有自己的状态和转换,这些区域可以并行运行。这对于同时管理多个独立但相关的状态机非常有用。

  5. 状态机触发器(State Machine Triggers)
    触发器是状态转换的另一种机制,它可以基于时间或其他条件自动触发状态转换,而不是基于事件。

  6. 状态机动作(State Machine Actions)
    状态机的转换可以关联动作(Action),这些动作在转换发生时执行。动作可以用于执行业务逻辑,比如发送通知、更新数据库等。

  7. 状态机守卫(State Machine Guards)
    守卫是一种条件逻辑,决定是否可以执行特定的状态转换。守卫可以用于检查业务规则,确保只有在特定条件满足时才允许状态转换。

通过这些高级特性,Spring StateMachine 提供了灵活和强大的机制来处理状态管理,并允许你根据具体的业务需求定制状态机的行为。这些特性可以单独使用,也可以组合使用,以提供更复杂的状态管理解决方案。

二、01.16 周四

2.1)问题01:windows中的 git GUI中打开文件中文乱码怎么处理,git bash打开的中文不乱码

git config --global gui.encoding utf-8
git config --global i18n.commit.encoding utf-8
git config --global i18n.logoutputencoding utf-8

2.2)问题02:Visual Studio 有哪些使用技巧

F5: 快速启动调试

2.3)问题03: git fetch和 git pull的区别

git fetch 是抓取远程的内容到本地,但是不自动合并到当前的分支
git pull 则是获取远程当前分支的内容,并自动与当前分支合并
git pull = git fetch + git merge

2.4) Visual Studio的使用教程

https://learn.microsoft.com/zh-cn/visualstudio/get-started/csharp/run-program?view=vs-2022

http://www.lryc.cn/news/529057.html

相关文章:

  • Linux中使用unzip
  • Baklib引领内容管理平台新时代优化创作流程与团队协作
  • 利用Redis实现数据缓存
  • jQuery小游戏(二)
  • 农产品价格报告爬虫使用说明
  • xceed PropertyGrid 如何做成Visual Studio 的属性窗口样子
  • Fork/Join框架_任务分解与并行执行
  • 智能家居监控系统数据收集积压优化
  • 详解python的单例模式
  • momask-codes 部署踩坑笔记
  • H3CNE-31-BFD
  • 蓝桥备赛指南(5)
  • 讯飞智作 AI 配音技术浅析(一)
  • MySQL(高级特性篇) 14 章——MySQL事务日志
  • openRv1126 AI算法部署实战之——TensorFlow TFLite Pytorch ONNX等模型转换实战
  • 【Redis】常见面试题
  • 每日 Java 面试题分享【第 17 天】
  • 「全网最细 + 实战源码案例」设计模式——桥接模式
  • JavaScript 进阶(上)
  • 【编译原理实验二】——自动机实验:NFA转DFA并最小化
  • 深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据
  • 如何利用Docker和.NET Core实现环境一致性、简化依赖管理、快速部署与扩展,同时提高资源利用率、确保安全性和生态系统支持
  • @Inject @Qualifier @Named
  • 创建 priority_queue - 进阶(内置类型)c++
  • 2. Java-MarkDown文件解析-工具类
  • 动态规划DP 最长上升子序列模型 登山(题目分析+C++完整代码)
  • css-设置元素的溢出行为为可见overflow: visible;
  • 家居EDI:Hom Furniture EDI需求分析
  • 1、开始简单使用rag
  • Linux Samba 低版本漏洞(远程控制)复现与剖析