activiti工作流的监听类调用spring中的been

在我们使用activiti监听类的时候有时需要调用spring中的been,但是你会发现如果在监听类中直接引入been会报null指针异常。如下:

public class QsbgEndLintener implements ExecutionListener{
    private static final long serialVersionUID = 1L;
    @Autowired  
    private QsbgService qsbgService;

    @Override
    public void notify(DelegateExecution arg0) throws Exception {
        String piId = arg0.getProcessInstanceId();
        Qsbg qsbg = new Qsbg();
        qsbg.setProcessInstanceId(piId);
        qsbg.setSfbl("2");      //设置办结
        qsbgService.updateByPiId(qsbg);
    }
}

原因是QsbgEndLintener 类是在activiti中直接new的,所以注入QsbgService 必然是空。
这里有种方法就是spring提供的一种方法可以让外面的程序调用spring的been及实现ApplicationContextAware类。
1、实现ApplicationContextAware拿到applicationContext获取been

public class SpringUtil implements ApplicationContextAware {  

    /** 
     * 当前IOC 
     *  
     */  
    private static ApplicationContext applicationContext;  

    /** 
     * * 设置当前上下文环境,此方法由spring自动装配 
     *  
     */  
    @Override  
    public void setApplicationContext(ApplicationContext arg0)  
            throws BeansException {  
        applicationContext = arg0;  
    }  

    /** 
     * 从当前IOC获取bean 
     * 
     * @param id 
     * bean的id 
     * @return 
     *
     */  
    public static Object getObject(String id) {  
        Object object = null;  
        object = applicationContext.getBean(id);  
        return object;  
    }  
} 

2、在spring.xml中配置been

<bean id="springUtil" class="com.train.util.SpringUtil"/>
<bean id="qsbgListenerServer" class="com.train.service.oa.QsbgService"></bean>

3、在activiti监听类中调用qsbgListenerServer

public class QsbgEndLintener implements ExecutionListener{
    private static final long serialVersionUID = 1L;

    @Override
    public void notify(DelegateExecution arg0) throws Exception {
        QsbgService qsbgService = (QsbgService)SpringUtil.getObject("qsbgListenerServer");
        String piId = arg0.getProcessInstanceId();
        Qsbg qsbg = new Qsbg();
        qsbg.setProcessInstanceId(piId);
        qsbg.setSfbl("2");      //设置办结
        qsbgService.updateByPiId(qsbg);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值