【发布时间】:2018-12-17 18:02:38
【问题描述】:
在camunda中使用表达式委托而不是java类有一些好处
【问题讨论】:
标签: java bpmn business-process-management camunda
在camunda中使用表达式委托而不是java类有一些好处
【问题讨论】:
标签: java bpmn business-process-management camunda
我唯一能想象到在 Java 类上使用表达式委托的是,每当我的自定义代码类需要使用 依赖注入 从 Spring bean 加载时,特别是在您想要控制委托实例的生命周期的地方由您的应用程序,而不是 Camunda 运行时引擎。
简单来说,通过使用表达式委托,我们可以使用 spring DI 来初始化委托类,而无需让 Camunda 引擎对其进行初始化。并充分利用 DI 的所有优势。
场景是我们想从 Spring bean 加载委托类,它需要在委托代码运行之前注入运行时依赖项。因此,我们可以使用 Spring bean 来初始化其他对象依赖项,并创建一个引用委托类的 bean 来注入其他已初始化的 bean。例如,
<serviceTask id="paymentTask" camunda:delegateExpression="${myPaymentBean}" />
在上面,myPaymentBean 是从 spring 解析的,它将是 JavaDelegate 的一个实例,它已经通过依赖注入 (DI) 使用所需的依赖项进行了初始化。我们使用 DI,因为我们的业务逻辑需要在投入生产之前进行彻底的测试,并且更容易在它们之上编写自动化测试。
如果你使用Java类,那么实例初始化部分将由camunda引擎完成,并且有一个限制是必须有一个公共的默认构造函数。这是非常有限的,因为大多数实际应用程序都有依赖关系,并且必须在代码之前已经初始化。要么您必须将依赖项设置为单例(我从不推荐),要么在代码之前使用工厂创建实例(效率低且难以测试)。
希望这可以澄清您的问题。
【讨论】: