Activiti與Spring結合的多種方式

1、手動注入

在Activiti中使用TaskListener時,若是是使用的類型是Class時,使用Spring是沒法自動注入須要的bean的,網上查了下,緣由是Acitivi引擎會在內部使用Class.newInstance(...)的方式建立一個該類的對象,這個對象不被Spring管理,因此Sping是沒法給這個對象注入咱們須要的beanjava

怎麼辦呢?使用ApplicationContext把須要的bean取出來手動賦值,簡單粗暴。web

package cn.lixuelong.demo;

import org.activiti.engine.IdentityService;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.identity.Group;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.ContextLoader;

/**
 * Created by long on 2017/12/5.
 */
public class AssigneeListenerImpl implements TaskListener {

    public AssigneeListenerImpl() {
        //從ApplicationContext中取到須要的bean,手動賦值
        ApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
        identityService = (IdentityService) context.getBean("identityService");
    }

    private IdentityService identityService;

    @Override
    public void notify(DelegateTask delegateTask) {
        String taskName = delegateTask.getName();
        String groupName;
        if ("經理".equals(taskName)) {
            groupName = "經理";
        } else if ("客服".equals(taskName)) {
            groupName = "客服";
        } else {
            return;
        }
        Group group = identityService.createGroupQuery().groupName(groupName).singleResult();
        delegateTask.addCandidateGroup(group.getId());
    }
}

方法笨了點,可是簡單省事,適合在bean少的狀況下使用spring

2、使用Expression方式

讓Spring管理你的Listener類(一樣實現了TaskListener接口),好比說我有個MyListener交給Spring管理了,給這個類起名爲"myListener",配置方式以下圖ide

而後它就是個被Spring管理的Listener了spa

相關文章
相關標籤/搜索