问题描述
在监听器中,不管是 @Autowired
还是 @Resource
注解都无法获取到服务
方法一
@PostConstruct
获取 Bean
/**
* 会签监听器
* @author: linjinp
* @create: 2019-11-18 11:43
**/
@Component
public class MyListener implements ExecutionListener {
// 页面配置参数注入
private FixedValue num;
@Autowired
private RuntimeService runtimeService;
private static MyListener myListener;
// 解决监听器中 Bean 获取不到问题
@PostConstruct
public void init() {
myListener = this;
myListener.runtimeService = this.runtimeService;
}
@Override
public void notify(DelegateExecution delegateExecution) {
// 调用 runtimeService 示例
ProcessInstance processInstance = myListener.runtimeService.createProcessInstanceQuery().processInstanceId(delegateExecution.getProcessInstanceId()).singleResult();
System.out.println(processInstance.getProcessDefinitionId());
// 获取页面配置参数的值
System.out.println(num.getExpressionText());
// 校验 okNum 是否已经存在
if (!delegateExecution.hasVariable("okNum")) {
delegateExecution.setVariable("okNum", 0);
}
// 已审核次数,审核一次 +1
int okNum = (int) delegateExecution.getVariable("okNum") + 1;
delegateExecution.setVariable("okNum", okNum);
}
}
方法二
流程引擎服务通过 Context.getProcessEngineConfiguration()
获取
import org.flowable.engine.impl.context.Context;
RuntimeService runtimeService = Context.getProcessEngineConfiguration().getRuntimeService();
自己的接口获取
工具类
/**
* 获取 Bean
* @author: linjinp
* @create: 2019-12-17 13:12
**/
@Component
public class SpringUtilConfig implements ApplicationContextAware {
/**
* 当前IOC
*
*/
private static ApplicationContext applicationContext;
/**
* * 设置当前上下文环境,此方法由spring自动装配
*
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
/**
* 从当前IOC获取bean
*
* @return
*
*/
public static <T> T getBean(Class<T> c) {
return applicationContext.getBean(c);
}
}
调用
RequsetFunctionService requsetFunctionService = SpringUtilConfig.getBean(RequsetFunctionService.class);