2

关于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();
    }
}
4

2 回答 2

5

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

public class SomeDelegate implements JavaDelegate {

    @Autowired
    private SomeBean bean;

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

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

但是,请注意,您可能在SomeBeanbean 中自动装配依赖项时遇到问题。使用该flowable:class属性时不会注入此依赖项。为了使它工作,您必须自己制作SomeDelegate一个实际的bean(例如 via @Service)并在您的流程定义中使用它 viaflowable:delegateExpression="${someDelegate}"

例子:

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

<serviceTask id="doSomething" name="Do Something" flowable:delegateExpression="${someDelegate}"/>
于 2020-08-13T06:21:08.393 回答
0

它应该像这样工作:

@Component
public class GetCurrentUserDlg implements JavaDelegate {

    @Autowired
    private PersonService personService;

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

@Component
public class PersonService {
   // its methods
}
于 2022-01-19T05:30:02.093 回答