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

打印 上一主题 下一主题

主题 889|帖子 889|积分 2667

一、01.14 周二

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

org.springframework.statemachine.StateMachine 是Spring框架中的一个组件,用于实现状态机的功能。状态机是一个抽象呆板,它可以处于有限个状态之一。状态机可以根据触发的事件(transitions)从一个状态转移到另一个状态。
状态机通常用于实现具有明确状态和状态转换的系统,比方工作流引擎、订单管理系统、游戏控制逻辑等。Spring StateMachine 提供了一个框架,使得在Spring应用程序中实现状态机变得轻易和直观。
如何使用StateMachine:


  • 定义状态和事件
    首先,你必要定义状态机可能处于的状态(State)以及可能触发转换的事件(Event)。这些通常通过枚举来实现。
    1. public enum States {
    2.     STATE1, STATE2, STATE3
    3. }
    4. public enum Events {
    5.     EVENT1, EVENT2, EVENT3
    6. }
    复制代码
  • 设置状态机
    接下来,你必要设置状态机,定义状态之间的转换逻辑。这通常在设置类中完成,使用Spring StateMachine的设置适配器。
    1. @Configuration
    2. @EnableStateMachine
    3. public class StateMachineConfig extends EnumStateMachineConfigurerAdapter<States, Events> {
    4.     @Override
    5.     public void configure(StateMachineStateConfigurer<States, Events> states)
    6.             throws Exception {
    7.         states
    8.             .withStates()
    9.                 .initial(States.STATE1)
    10.                 .state(States.STATE2)
    11.                 .end(States.STATE3);
    12.     }
    13.     @Override
    14.     public void configure(StateMachineTransitionConfigurer<States, Events> transitions)
    15.             throws Exception {
    16.         transitions
    17.             .withExternal()
    18.                 .source(States.STATE1).target(States.STATE2).event(Events.EVENT1)
    19.                 .and()
    20.             .withExternal()
    21.                 .source(States.STATE2).target(States.STATE3).event(Events.EVENT2);
    22.     }
    23. }
    复制代码
    在这个设置中,我们定义了一个初始状态STATE1,以及在EVENT1发生时从STATE1转移到STATE2,以及在EVENT2发生时从STATE2转移到STATE3的转换。
  • 使用状态机
    一旦状态机被设置,你可以在你的服务或组件中注入StateMachine对象,并使用它来管理状态。
    1. @Service
    2. public class MyService {
    3.     @Autowired
    4.     private StateMachine<States, Events> stateMachine;
    5.     public void doSomething() {
    6.         stateMachine.start();
    7.         stateMachine.sendEvent(Events.EVENT1);
    8.         stateMachine.sendEvent(Events.EVENT2);
    9.         stateMachine.stop();
    10.     }
    11. }
    复制代码
    在这个服务中,我们启动状态机,发送事件来触发状态转换,并在完成后停止状态机。
Spring StateMachine还提供了许多高级特性,包括状态监听器、状态机长期化、状态机拦截器等。通过这些特性,你可以构建复杂的状态管理逻辑,以适应各种应用场景的需求。
1.2)题目02:Spring StateMachine 提供了一系列高级特性

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

  • 状态监听器(State Listeners)
    状态监听器允许你在状态机的状态变化时实行自定义的逻辑。你可以监听状态的变化、事件的发生、以及转换的发生。通过实现 StateListenerAdapter 或 StateMachineListener 接口,可以创建自己的监听器。
    1. @Override
    2. public void configure(StateMachineConfigurationConfigurer<States, Events> config)
    3.     throws Exception {
    4.     config
    5.         .withConfiguration()
    6.             .listener(new StateMachineListenerAdapter<States, Events>() {
    7.                 @Override
    8.                 public void stateChanged(State<States, Events> from, State<States, Events> to) {
    9.                     // 自定义逻辑
    10.                 }
    11.             });
    12. }
    复制代码
  • 状态机长期化(State Machine Persistence)
    状态机长期化允许你将状态机的状态存储在长期化存储(如数据库)中,如许即使应用程序重启,状态机也能恢复到之前的状态。Spring StateMachine 提供了长期化接口,你可以通过实现 StateMachinePersist 接口来自定义长期化逻辑。
    1. public class MyStateMachinePersist implements StateMachinePersist<States, Events, String> {
    2.     // 实现读取和写入状态机的方法
    3. }
    复制代码
  • 状态机拦截器(State Machine Interceptors)
    状态机拦截器可以在状态机转换发生之前或之后实行自定义逻辑。通过实现 StateMachineInterceptor 接口,可以拦截状态机的各种事件。
    1. @Override
    2. public void configure(StateMachineConfigurationConfigurer<States, Events> config)
    3.     throws Exception {
    4.     config
    5.         .withConfiguration()
    6.             .withInterceptor(new StateMachineInterceptorAdapter<States, Events>() {
    7.                 @Override
    8.                 public void preStateChange(State<States, Events> state, Message<Events> message,
    9.                     Transition<States, Events> transition, StateMachine<States, Events> stateMachine) {
    10.                     // 转换前的逻辑
    11.                 }
    12.             });
    13. }
    复制代码
  • 状态机区域(State Machine Regions)
    对于更复杂的场景,一个状态机可以分成多个区域(Region),每个区域有自己的状态和转换,这些区域可以并行运行。这对于同时管理多个独立但相关的状态机非常有效。
  • 状态机触发器(State Machine Triggers)
    触发器是状态转换的另一种机制,它可以基于时间或其他条件主动触发状态转换,而不是基于事件。
  • 状态机动作(State Machine Actions)
    状态机的转换可以关联动作(Action),这些动作在转换发生时实行。动作可以用于实行业务逻辑,好比发送通知、更新数据库等。
  • 状态机守卫(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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

吴旭华

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表