Есть ли какие-то преимущества в использовании делегата выражения по сравнению с классом java в camunda?
Каковы преимущества использования выражений Delegates над классами Java?
Ответы (1)
Единственное, что я могу представить, используя делегаты выражений вместо классов Java, это то, что всякий раз, когда мой пользовательский класс кода требуется для загрузки из Spring bean-компонентов с использованием внедрения зависимостей, особенно когда вы хотите контролировать жизненный цикл экземпляра делегирования вашим приложением , а не двигатель выполнения Camunda.
Проще говоря, используя делегаты выражения, мы можем инициализировать класс делегата, как мы хотим, используя Spring DI, не позволяя движку Camunda инициализировать его. И используйте все преимущества DI.
Сценарий заключается в том, что мы хотим загрузить наш класс делегирования из bean-компонентов Spring, где требуется внедрение зависимостей времени выполнения до запуска нашего кода делегирования. Таким образом, мы можем использовать bean-компоненты spring для инициализации зависимостей других объектов и создать bean-компонент, ссылающийся на класс делегирования, внедряющий другие инициализированные bean-компоненты. Например,
<serviceTask id="paymentTask" camunda:delegateExpression="${myPaymentBean}" />
В приведенном выше примере myPaymentBean
разрешается из spring, и это будет экземпляр JavaDelegate
, который уже инициализирован необходимыми зависимостями посредством внедрения зависимостей (DI). Мы использовали DI, потому что наша бизнес-логика должна быть тщательно протестирована перед запуском в производство, и поверх нее проще писать автоматические тесты.
Если вы используете классы Java, то часть инициализации экземпляра будет выполняться движком camunda, и есть ограничение, что должен быть общедоступный конструктор по умолчанию. Это очень ограничено, поскольку большинство практических приложений имеют зависимости и должны быть уже инициализированы до кода. Либо вам нужно сделать свои зависимости как синглтоны (чего я никогда не рекомендую), либо использовать фабрики для создания экземпляров перед кодом (что неэффективно и сложнее тестировать).
Надеюсь, это прояснит ваш вопрос.