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

来源:互联网 发布:淘宝如何选择快递公司 编辑:程序博客网 时间:2024/06/05 01:13

在我们使用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);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

原因是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;      }  } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

2、在spring.xml中配置been

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

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);    }}
阅读全文
0 0
原创粉丝点击