使用Activiti BPMN的春豆

时间:2016-02-01 12:59:52

标签: spring activiti

我目前正在寻找使用Activiti的Spring bean实现。我需要将bean注入多个服务类。

这是我尝试过的。

的beans.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id="helloWorld" class="com.test.spring.HelloWorld" scope="singleton" autowire="byName">
       <property name="message" value="Hello World!"/>
   </bean>

</beans>

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为消息设置了新值,但它没有反映在ServiceTask2中。原因可能是我也在ServiceTask2中创建了新的ApplicationContext。有人可以[租赁让我知道如何在多个Activiti服务任务中使用相同的单例Bean。

1 个答案:

答案 0 :(得分:1)

你不能像我所知那样将bean(@Autowire)自动装入Java委托,所以为了访问你在应用程序配置中定义的bean,你需要访问applicationContext并调用getBean()方法。 p>

我通常会创建一个ApplicationContext提供程序类来简化这一过程,因为您倾向于重复使用它。

这篇Stackoverflow文章展示了如何创建这样的野兽:

Spring get current ApplicationContext