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
}
我有一个问题,关于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"
但是,请注意,您可能会遇到 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
}