jbpm中各种handler如何使用spring里面的bean方法02

本文介绍了一种改进的角色分配方法,通过Spring框架自动装配Bean属性,实现JBPM工作流引擎中角色到用户的自动分配,避免了在配置文件中的显式定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是对上一篇的同样问题的更好的方法:

 

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的配置文件中添加什么了,而且比上一篇的方法好.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值