activiti監聽器無法實例化(SpringBoot)

SpringBoot項目中,activiti某個流程節點配置了任務監聽器,代碼如下

public class ApplyListener implements TaskListener, ExecutionListener {
    private static final long serialVersionUID = -6000293034409953144L;

    @Autowired
    private TaskService taskService;
    @Override
    public void notify(DelegateTask delegateTask) {


        taskService.setAssignee(delegateTask.getId(),"zhangsan");
    }

    @Override
    public void notify(DelegateExecution delegateExecution) {

    }
}

執行任務提交報錯:Exception while invoking TaskListener: null

個人理解,上述過程中MyTaskListenre雖然存在於Spring容器中,但未被Spring容器所管理,所以@Autowired失效

 

解決方案:

寫一個工具類,手動獲取Bean


 @Component
public class SpringUtil implements ApplicationContextAware {
 
   /**
    * 當前IOC
    *
    */
   private static ApplicationContext applicationContext;
    
    /**
     * 設置applicationContext
     */
   @Override
   public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
      this.applicationContext = applicationContext;
   }
 
   public static <T> T getObject(Class<T> clazz){
       return applicationContext.getBean(clazz);
   }
}

修改 監聽器類代碼

@Component
@Slf4j
public class ApplyListener implements TaskListener, ExecutionListener {
    private static final long serialVersionUID = -6000293034409953144L;

 
    @Override
    public void notify(DelegateTask delegateTask) {

        TaskService taskService = SpringUtil.getObject(TaskService.class);
        taskService.setAssignee(delegateTask.getId(),"zhangsan");
    }

    @Override
    public void notify(DelegateExecution delegateExecution) {

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章