Activiti使用UEL进行表达式解析。
为了在所有环境上支持UEL标准的所有最新特性,我们使用JUEL的修改版本
1. JUEL介绍
官方网址: http://juel.sourceforge.net/guide/basic/index.html
其他资料:Juel基本使用 - 简书
2.表达式在activiti中应用
Java服务任务 Java Service tasks
执行监听器 Execution Listeners
任务监听器 Task Listeners
条件流Conditional sequence flows
3.表达式用法
3.1 值表达式 Value expression
解析为一个值。默认情况下,在流程中设置的变量值,都可以通过此处的表达式展示,调用。
${myVar}
${myBean.myProperty}
3.2 方法表达式 Method expression
注入一个方法,可以带或不带参数。方法表达式调用的方法用括号
${printer.print()}
${myBean.addNewOrder('orderName')}
${myBean.doSomething(myVar, execution)}
方法参数:(1)字面值,传什么值就是什么值 (2)表达式:表达式支持原始类型(primitive)、bean、list、array(数组)与map
总结
无论是值表达式 还是 方法表达式,流程中设置的变量都可以引用。另外activiti中默认的对象也可以引用:
- execution : 持有进行中执行(execution)额外信息的 DelegateExecution 。
- task : 持有当前任务(task)额外信息的 DelegateTask 。请注意:只在任务监听器的表达式中可用。
- authenticatedUserId : 当前已验证的用户id。如果没有已验证的用户,该变量不可用。
4. 将spring bean注入到activiti中,通过表达式使用
4.1 xml集成方式
xml生命bean,然后通过activiti的 注入管理。
spring xml文件中:
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
...
<property name="beans">
<map>
<entry key="printer" value‐ref="printer" />
</map>
</property>
</bean>
<bean id="printer" class="org.activiti.examples.spring.Printer" />
流程定义xml文件
<definitions id="definitions">
<process id="helloProcess">
<startEvent id="start" />
<sequenceFlow id="flow1" sourceRef="start" targetRef="print" />
<serviceTask id="print" activiti:expression="#{printer.printMessage()}" />
<sequenceFlow id="flow2" sourceRef="print" targetRef="end" />
<endEvent id="end" />
</process>
</definitions>
bean对应的java类
public class Printer {
public void printMessage() {
System.out.println("hello world");
}
}
4.2 注解集成
在Activiti中使用spring的Bean_多学习多思考-CSDN博客
activiti监听器中注入spring bean_bool的博客-CSDN博客