使用表达式委托比 Java 类 有什么好处?

What are the benefits of using expression Delegates over Java classes?

在 camunda

中使用表达式委托比 java class 有一些好处吗

我唯一能想到的是,在 Java classes 上使用表达式委托是,每当我的自定义代码 class 需要使用 [= 从 spring bean 加载时25=]依赖注入,特别是你想通过你的应用程序控制委托实例的生命周期,而不是 Camunda 运行时引擎。

简而言之,通过使用表达式委托,我们可以根据需要使用 spring DI 初始化委托 class,而无需让 Camunda 引擎对其进行初始化。并充分利用DI的优势。

场景是我们要从 spring beans 加载我们的委托 class,它需要在我们的委托代码运行之前注入运行时依赖项。因此,我们可以使用 spring bean 来初始化其他对象依赖项,并创建一个引用委托 class 的 bean 来注入其他已初始化的 bean。例如,

<serviceTask id="paymentTask" camunda:delegateExpression="${myPaymentBean}" />

在上面,myPaymentBean 是从 spring 解析出来的,它将是 JavaDelegate 的一个实例,它已经通过依赖注入 (DI) 使用所需的依赖项进行了初始化。我们使用 DI,因为我们的业务逻辑需要在投入生产之前进行彻底测试,并且更容易在它们之上编写自动化测试。


如果使用Java classes,那么实例初始化部分将由camunda引擎完成,并且有一个限制,必须有一个public默认构造函数.这是非常有限的,因为大多数实际应用程序都有依赖关系,并且必须在代码之前已经初始化。您要么必须将依赖项作为单例(我从不推荐),要么使用工厂在代码之前创建实例(效率低下且更难测试)。

希望这能澄清您的问题。