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

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

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);
    }
}

你可能感兴趣的:(web)