activiti与spring合用,配置文件可配置如下:
<!-- Activiti引擎配置 --> <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <property name="processEngineName" value="spring"></property> <property name="dataSource" ref="dataSource" /> <property name="transactionManager" ref="transactionManager" /> <property name="databaseSchemaUpdate" value="true" /> <property name="jobExecutorActivate" value="false" /> <property name="dbIdentityUsed" value="false"></property> <property name="asyncExecutorEnabled" value="true" /> <property name="asyncExecutorActivate" value="true" /> </bean> <!-- Activiti引擎工厂 --> <bean id="processEngineFactory" class="org.activiti.spring.ProcessEngineFactoryBean"> <property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean> <!-- Activiti的Service --> <bean id="repositoryService" factory-bean="processEngineFactory" factory-method="getRepositoryService" /> <bean id="runtimeService" factory-bean="processEngineFactory" factory-method="getRuntimeService" /> <bean id="formService" factory-bean="processEngineFactory" factory-method="getFormService" /> <bean id="identityService" factory-bean="processEngineFactory" factory-method="getIdentityService" /> <bean id="taskService" factory-bean="processEngineFactory" factory-method="getTaskService" /> <bean id="historyService" factory-bean="processEngineFactory" factory-method="getHistoryService" /> <bean id="managementService" factory-bean="processEngineFactory" factory-method="getManagementService" />
|
初始化入口在processEngineFactory.getObject()方法中,spring的bean加载时,每次实例返回前都会调用getObjectForBeanInstance方法(AbstractBeanFactory类中),内部会调用到BeanFactory子类的getObject()方法,利用这个机制,ProcessEngineFactoryBean作为FactoryBean的实现类,实现了模板方法getObject并在其中完成了activiti引擎的初始化工作。
public ProcessEngine getObject() throws Exception { configureExpressionManager(); configureExternallyManagedTransactions();
if (processEngineConfiguration.getBeans() == null) { // ProcessEngineFactoryBean实现了ApplicationContextAware接口,会得到spring的applicationContext,并把所有的bean关联到processEngineConfiguration的beans对象中,后续可通过访问processEngineConfiguration.beans得到容器中的任意bean实例
processEngineConfiguration.setBeans(new SpringBeanFactoryProxyMap(applicationContext)); } // activiti引擎实际初始化 this.processEngine = processEngineConfiguration.buildProcessEngine(); return this.processEngine; } |