activiti监听无法注入spring的bean(activiti version 5.18.0)
由于公司要自己研发 erp ,走上了研究 activiti 的道路,今天小编在做 demo 的时候,遇到了一个问题,正如标题所说的:activiti 中无法注入bean,注入 string 时没有问题。
在百度上找了许久,没有结果,只能自己去搞。。。。
其实并不是无法注入 bean 只是方向错了!!
其实这个问题很简单,但是百度上的答案都是 copy 的,一错再错。。。
废话不多说,开始解释!!
首先看看如何注入 string,注入 string 类型的值 xml 中会加上 <![CDATA[ ..值.. ]]>
<activiti:field name="one"> <activiti:string><![CDATA[hello]]></activiti:string> </activiti:field>
再看如何注入 bean,注入 bean 要用表达式方式注入!注入 bean 类型时,会用 el 表达式方式注入,花括号里面是 spring 容器中 bean 的 ID
<activiti:field name="myService"> <activiti:expression>${myService}</activiti:expression> </activiti:field>
在 xml 中这样写,就可以将这两个值注入到对应的监听器中了!
关键是怎么获取!!
public class MyListener implements TaskListener, Serializable {
    private Expression myService;
    private FixedValue one;
    @Override
    public void notify(DelegateTask delegateTask) {
        if (myService.getValue(delegateTask) instanceof MyService) {
            MyService service = (MyService) myService.getValue(delegateTask);
            service.sayhi();
        }
        System.out.println(delegateTask.getName());
        System.out.println(one.getExpressionText());
        System.out.println("走了??");
    }
}
首先监听需要实现对应的 activiti 监听接口(TaskListener、ExecutionListener),还需要实现序列化接口,避免其他问题
在取值时需要用不同的对象,取不同的值;如果是 string 的值,需要用 FixedValue 类来接;如果是表达式,需要用 Expression 类来接(都可以传多个)
下面就可以在 notify 方法中获取这些值了。
表达式类型取值时需要用 Expression 对象调用 getValue 方法,该方法的参数就是 notify 方法的参数,然后就可以强转成所传入的 bean 类型,就可以执行该类中的方法了!!
string 类型取值时需要用 FixedValue 对象调用 getExpressionText 方法就可以获取传入的值!!
以上就是小编在使用 activiti 时无法注入 spring 容器中的 bean 时的解决方法!
还望大神多多给出意见!!
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号