Spring Beans with Activiti BPMN 使用Activiti BPMN的Spring Beans
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。
(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了。