flowableタスクリスナーとjavaサービスタスク依存注入の問題

2327 ワード

flowableタスクリスナーとjavaサービスタスクを最近使用した問題を記録します.
タスクリスナー
TaskListenerは主にusertaskをリスニングする場合であり、リスニングイベントeventは4種類ある:create作成assignment割当者complete完了delete削除
xml:

  
    
  


コード:
public class MyListener implements TaskListener {

    @Override
    public void notify(DelegateTask delegateTask) {

        System.out.println("===========     ============");
    }

}

ここで問題があります.spring依存注入がある場合、取得できません.見てみると、プロセスエンジンが起動したとき、依存注入はまだ初期化されていません.groovyとjavaが工事で混在しているので、この問題があるかもしれません.
依存注入
ここでは、ApplicationContextAwareインタフェースを介してApplicationContextオブジェクトインスタンスを取得する別の方法で解決する
@Component
public class MyListener implements TaskListener, ApplicationContextAware {

    private static  ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext arg0) throws BeansException {
        applicationContext = arg0;
    }

    @Override
    public void notify(DelegateTask delegateTask) {

        String processInsId = delegateTask.getProcessInstanceId();
        MyService myService = (MyService) applicationContext.getBean("myService");

        // TODO   service  
        
        System.out.println("==========     ======");
    }

}

JAvaサービスタスク
同様にjavaサービスタスクにもこの問題がありますxml:
    
    

コード:
@Component
public class ClassImplementsJavaDelegate implements JavaDelegate, ApplicationContextAware {

	private static ApplicationContext applicationContext;

	@Override
	public void setApplicationContext(ApplicationContext arg0) throws BeansException {
		applicationContext = arg0;
	}
	
	public void execute(DelegateExecution execution) {

		String processInsId = execution.getProcessInstanceId();
		MyService myService = (MyService) applicationContext.getBean("myService");
		System.out.println("=====================     JavaDelegate  =====================");
	}
}