【问题标题】:Spring bean injection problem in Flowable service taskFlowable服务任务中的Spring bean注入问题
【发布时间】:2020-08-04 10:32:08
【问题描述】:

想问一下Flowable的服务任务中的spring bean注入,为什么只有这种带有static修饰符的注入起作用,它的逻辑是什么?

我必须在 Flowable java 服务任务中注入一个 spring bean,我测试了一些不同类型的注入字段、构造函数和 setter 注入,最终使用 static 修饰符的 setter 注入对我来说是这样的:

public class GetCurrentUserDlg implements JavaDelegate {

    private static PersonService personService;

    @Autowired
    public void setPersonService(PersonService personService) {
        this.personService = personService;
    }

    @Override
    public void execute(DelegateExecution execution) {
        personService.getCurrentUser();
    }
}

【问题讨论】:

    标签: java spring bpmn flowable


    【解决方案1】:

    虽然我无法回答您的问题,但以下内容对我来说很好:

    public class SomeDelegate implements JavaDelegate {
    
        @Autowired
        private SomeBean bean;
    
        @Override
        public void execute(DelegateExecution execution) {
            System.out.println(this.bean);
        }
    }
    

    然后通过flowable:class="packages.SomeDelegate"在过程中使用该类

    但是,请注意,SomeBean bean 中的自动装配依赖项可能存在问题。使用 flowable:class 属性时不会注入此依赖项。为了让它工作,你必须让SomeDelegate成为一个实际的bean本身(例如通过@Service)并通过flowable:delegateExpression="${someDelegate}"在你的流程定义中使用它

    例子:

    @Service("someDelegate")
    public class SomeDelegate implements JavaDelegate {
    ...
    

    <serviceTask id="doSomething" name="Do Something" flowable:delegateExpression="${someDelegate}"/>
    

    【讨论】:

    • 如果答案是解决方案的一部分,您是否介意接受答案以供进一步参考
    • 感谢您的回复实际上我改变了我的方法,我将 JavaDelegate 类作为 Spring bean,我也在 BPMN 中使用了 'activiti:delegateExpression' 标签我实际上不明白为什么只在静态字段中注入 setter用以前的方法工作
    • 当使用flowable:class 时,Flowable 将实例化该类。这意味着您不能在这些类中使用 Spring Dependency 自动装配。当你想使用 Spring Beans 时,来自 Matte 的回复是要走的路
    【解决方案2】:

    它应该像这样工作:

    @Component
    public class GetCurrentUserDlg implements JavaDelegate {
    
        @Autowired
        private PersonService personService;
    
        @Override
        public void execute(DelegateExecution execution) {
            personService.getCurrentUser();
        }
    }
    
    @Component
    public class PersonService {
       // its methods
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 2012-07-27
      • 1970-01-01
      相关资源
      最近更新 更多