Spring Beans with Activiti BPMN 使用Activiti BPMN的Spring Beans

7 浏览
0 Comments

Spring Beans with Activiti BPMN 使用Activiti BPMN的Spring Beans

我目前在研究使用Activiti实现Spring bean。我需要将一个bean注入到多个服务类中。

以下是我尝试过的内容。

beans.xml



   
       
   

Bean类

package com.test.spring;
public class HelloWorld {
     private String message;
     public void setMessage(String message){
          this.message  = message;
     }
     public void getMessage(){
          System.out.println("Your Message : " + message);
     }
}

Activiti服务任务

public class ServiceTask1 implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) throws Exception {
        System.out.println("Begin Trans : Execute:");
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
          obj.getMessage();
          obj.setMessage("This is second message");
          obj.getMessage();
    }
}
public class ServiceTask2 implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) throws Exception {
        System.out.println("Begin Trans : Execute:");
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
          obj.getMessage();
    }
}

尽管ServiceTask1为message设置了新值,但在ServiceTask2中没有反映出来。原因可能是我在ServiceTask2中也创建了一个新的ApplicationContext。请告诉我如何在多个Activiti服务任务中使用同一个单例Bean。

0
0 Comments

(Spring Beans with Activiti BPMN)这个问题的出现的原因是无法将() beans自动装入Java Delegate,因此为了访问应用程序配置中定义的beans,需要访问applicationContext并调用getBean()方法。

解决方法是创建一个ApplicationContext提供者类,以便轻松实现此操作,因为您往往会反复重用它。

以下是如何创建这样一个类的Stackoverflow帖子的示例代码:

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class ApplicationContextProvider implements ApplicationContextAware {
    private static ApplicationContext applicationContext;
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }
    @Override
    public void setApplicationContext(ApplicationContext context) throws BeansException {
        applicationContext = context;
    }
}

使用上述代码后,您可以在Java Delegate中通过以下方式访问applicationContext并获取所需的beans:

ApplicationContext context = ApplicationContextProvider.getApplicationContext();
YourBean yourBean = (YourBean) context.getBean("yourBeanName");
// 使用yourBean进行操作

这样就可以在Activiti BPMN中使用Spring Beans了。

0