当前位置: 首页 > 知识库问答 >
问题:

如何为库中提供的Spring statemachine实现依赖于实现的转换保护?

张可人
2023-03-14

我提供了一个Spring statemachine,其中包含库中的基本程序状态,作为不同实现的基础。使用基本statemachine根据当前实现添加自定义转换操作似乎很容易,因为提供了转换注释。

import org.springframework.statemachine.StateContext;
import org.springframework.statemachine.guard.Guard;
// ... custom States and Events imports

public class GuardDecorator implements Guard<States, Events> {

    private Guard<States, Events> guard;

    public GuardDecorator() {
        this.guard = new DefaultGuard();
    }

    public GuardDecorator(Guard<States, Events> guard) {
        this.guard = guard;
    }

    public void setGuard(Guard<States, Events> guard) {
        this.guard = guard;
    }

    public String wrappedGuardInfo() {
        return this.guard.toString();
    }

    @Override
    public boolean evaluate(StateContext<States, Events> context) {
        return this.guard.evaluate(context);
    }
}

public class DefaultGuard implements Guard<States, Events> {
    @Override
    public boolean evaluate(StateContext<States, Events> context) {
        return true;
    }
}
// ...
@Bean
public GuardDecorator guard() {
    return new GuardDecorator();
}
// ...
@Override
public void configure(
    StateMachineTransitionConfigurer<States, Events> transitions)
    throws Exception {

    transitions.withExternal()
        .source(States.S1)
        .target(States.S2)
        .event(Events.E1)
        .guard(guard());
    }
// ...

我现在的问题是:

  • 我是否遗漏了文档中的某些内容,是否有一种内置的方法可以做到这一点?
  • 为库中提供的基本statemachine获得实现依赖项保护的其他解决方案吗?

共有1个答案

楮阳
2023-03-14

没有什么内置的,但不确定是否必须有。如果您基于JavaConfig进行此配置,您可以在那里创建默认的guard,并允许用户自动执行可选的重写实现

Autowired(required=false)
@Qualifier("myGuard")
Guard<States, Events> guard;

或者允许用户重写bean定义本身。如果在多个配置类中创建了相同的bean,则按顺序进行的最新解析将获胜。这个概念在Spring雨伞项目中被大量使用,在这些项目中存在缺省bean,但允许用户重写。

@Bean(name="myGuard")
public GuardDecorator guard() {
    return new GuardDecorator();
}
 类似资料:
  • null 创建意图的代码如下所示: 当错误发生在我的手机上时,这里是堆栈跟踪的前两行: 04-07 13:56:24.423:E/DatabaseUTILS(19431):java.lang.SecurityException:权限拒绝:读取com.enigmadream.pictureCode.pictureContentProvider uri内容://com.enigmadream.pict

  • 基于文档(4.7.6 -了解特定的依赖关系),我们可以通过指定配置本身来了解特定的配置。在示例中,他们将配置< code>compile用作不推荐使用的配置。我试图重现相同的命令,将< code>build.gradle中的< code>compile配置替换为< code>implementation配置(正如我所得到的,我们不应该再使用< code>compile)。但是当我跑的时候: Gra

  • 基于文档(4.7.6-获取对特定依赖关系的洞察),我们可以获取特定配置的洞察,并指定配置本身。在本例中,他们将用作配置,但不推荐使用该配置。我尝试重现相同的命令,在中,将配置替换为配置(据我所知,我们不应该再使用)。但当我跑的时候: 格雷德尔回来了: 我的文件如下: 如果我使用,这是否意味着我无法了解依赖关系,或者是否有其他方法可以获得依赖关系?

  • 本文向大家介绍Springboot的maven间接依赖的实现,包括了Springboot的maven间接依赖的实现的使用技巧和注意事项,需要的朋友参考一下 在项目中经常使用 maven 来管理项目,但是有时候对于 maven 的细节还是了解的不是很清楚,因此今天复习下。 maven项目 首先开始建立一个最简单的 maven 项目,其配置如下图: 可以看到最上面一行是 xml 的文件描述符,然后再是

  • 对于一个项目,我有这样类型的结构: 这很好,但前提是jar已经由上一个构建生成,这意味着我必须启动两次才能使其工作。 我认为问题在于,与常规依赖项(例如)不同,在不请求构建子项目的情况下计算文件树依赖项,并且在第一次构建时,没有向类路径添加jar文件。 我尝试了,但是没有成功,因为它是在求值之后执行的。 我不能将lib切换到Java插件,因为它是特定于Android的代码,而且我需要为其他项目构建