首先activiti.cfg.xml文件采用的是spring bean配置文件格式,因此activiti在初始化时,需要将该文件中的内容实例化成对象,这个地方用到了spring中的DefaultListableBeanFactory类来实现对activiti.cfg.xml中对象的初始化,代码逻辑比较简单,具体代码如下:
public static ProcessEngineConfiguration parseProcessEngineConfiguration(Resource springResource, String beanName) {
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader xmlBeanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);
xmlBeanDefinitionReader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_XSD);
xmlBeanDefinitionReader.loadBeanDefinitions(springResource);
ProcessEngineConfigurationImpl processEngineConfiguration = (ProcessEngineConfigurationImpl) beanFactory.getBean(beanName);
processEngineConfiguration.setBeans(new SpringBeanFactoryProxyMap(beanFactory));
return processEngineConfiguration;
}
这种加载方式的好处是什么呢?activiti可以对自身的流程引擎配置信息进行单独管理,不受其他spring配置文件的干扰,做到了隔离。