这是对上一篇的同样问题的更好的方法:
package cn.edu.hbmy.oa.manager.impl;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.access.BeanFactoryLocator;
import org.springframework.beans.factory.access.BeanFactoryReference;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springmodules.workflow.jbpm31.JbpmFactoryLocator;
public class BaseAutowire {
public BaseAutowire() {
((AutowireCapableBeanFactory)retrieveBeanFactory())
.autowireBeanProperties(this,
AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE,true);
}
protected BeanFactory retrieveBeanFactory(){
BeanFactoryLocator beanFactoryLocator = new JbpmFactoryLocator();
BeanFactoryReference beanFactoryReference = beanFactoryLocator.useBeanFactory(null);
BeanFactory beanFactory = beanFactoryReference.getFactory();
return beanFactory;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="assignmentHandler5"> <start-state name="开始"> <transition name="提价给角色" to="角色审批"></transition> </start-state> <task-node name="角色审批"> <task name="角色审批"> <assignment class="cn.edu.hbmy.oa.manager.handler.MyAssignmentHandler5"> <roleName>系统管理员</roleName> </assignment> </task> <transition name="角色审批完成" to="完成"></transition> </task-node> <end-state name="完成"></end-state> </process-definition>
public class MyAssignmentHandler5 extends BaseAutowire implements AssignmentHandler {
private String roleName; //jbpm来注入
@Override
public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {
if(roleName == null){
throw new RuntimeException("角色名称不可以是空");
}
UserManager userManager = (UserManager)retrieveBeanFactory().getBean("userManager"); //获取sprig管理的bean
List<?> rolesName = userManager.searchUserOfRole(roleName);
if(rolesName.isEmpty()){
throw new RuntimeException("角色[" + roleName+ "]还没有被分配给用户");
}
String[] role_name = rolesName.toArray(new String[rolesName.size()]);
assignable.setPooledActors(role_name); //将角色下面的用户设置未流程实例的审批人
}
}
这个方法可以不需要再spring的配置文件中添加什么了,而且比上一篇的方法好.