SpringFlowable服务任务中的bean注入问题

Spring bean injection problem in Flowable service task

我有一个问题,关于spring Flowable服务任务中的bean注入,为什么只有这种带有static修饰符的注入有效,它的逻辑是什么?

我必须在 Flowable java 服务任务中注入一个 spring bean,我测试了一些不同类型的注入字段、构造函数和 setter 注入,最终 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();
    }
}

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

public class SomeDelegate implements JavaDelegate {

    @Autowired
    private SomeBean bean;

    @Override
    public void execute(DelegateExecution execution) {
        System.out.println(this.bean);
    }
}

然后通过flowable:class="packages.SomeDelegate"

在过程中使用class

但是,请注意,您可能会遇到 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}"/>

它应该像这样工作:

@Component
public class GetCurrentUserDlg implements JavaDelegate {

    @Autowired
    private PersonService personService;

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

@Component
public class PersonService {
   // its methods
}