activiti5.0.alpha1之配置文件的结构及功能解析

activiti的配置文件主体类是Configuration,它的源码分成几部分,首先是类属性:

  //日志初始化

  private static Logger log = Logger.getLogger(Configuration.class.getName());

  //定义通用的常量,用于各项初始化
  public static final String NAME_COMMANDEXECUTOR = "CommandExecutor";
  public static final String NAME_DBSCHEMA = "DbSchema";
  public static final String NAME_IBATISSQLSESSIONFACTORY = "IbatisSqlSessionFactory";
  public static final String NAME_DBIDGENERATOR = "DbidGenerator";
  public static final String NAME_DEPLOYERMANAGER = "DeployerManager";
  public static final String NAME_PROCESSCACHE = "ProcessCache";
  public static final String NAME_PERSISTENCETYPEISSQL = "PersistenceTypeIsSQL";
  public static final String NAME_TRANSACTIONALOBJECTDESCRIPTORS = "TransactionalObjectDescriptors";
  public static final String NAME_JOBEXECUTOR = "JobExecutor";

  //实例属性
  protected String name = null;//配置属性名
  protected String type = null;//配置属性类型
  protected Map<String, Object> configurations = new HashMap<String, Object>();//配置属性集合

 

然后是构造函数:

 

  //默认构造函数,日志输出流程引擎版本

  public Configuration() {
    log.info("activiti version "+ProcessEngine.VERSION);
  }

然后是功能初始化方法 

  //添加配置属性,以键值对的形式放入配置属性集合中
  public Configuration configurationObject(String name, Object object) {
    configurations.put(name, object);
    return this;
  }

 

  //通过资源名生成配置文件

  public Configuration configurationResource(String resourceName) {
    ConfigurationParser.INSTANCE
      .createParse()
      .configuration(this)
      .sourceResource(resourceName)
      .execute();

    return this;
  }

  //通过url生成配置文件
  public Configuration configurationUrl(URL url) {
    ConfigurationParser.INSTANCE
      .createParse()
      .configuration(this)
      .sourceUrl(url)
      .execute();
 
    return this;
  }

剩余的就是get/set方法和初始化流程引擎的方法了。

从上面我们可以看出,生成配置文件的方法就是Configuration 类的核心方法。这个生成过程也很有意思,当我们对源码进行追踪的时候,我们发现关联的有4个类:解析器父类Parser和解析器子类ConfigurationParser,解析处理父类Parse和解析处理子类ConfigurationParse。

单从名字来看,这个4个类两两对应;从功能来看,解析器类为解析处理类提供解析器,解析处理类负责具体配置文件的解析。

首先来看解析器父类Parser:

public class Parser {

  //protected 的静态类属性,初始化XML解析器工厂

  protected static SAXParserFactory defaultSaxParserFactory = SAXParserFactory.newInstance();

  //提供自身的常量单例对象
  public static final Parser INSTANCE = new Parser();

 

  //以自身为参数提供新的解析处理类

  public Parse createParse() {
    return new Parse(this);
  }

 

  //从XML解析器工厂中获取XML解析器提供给子类

  protected SAXParser getSaxParser() throws Exception {
    return getSaxParserFactory().newSAXParser();
  }

 

  //为子类提供XML解析器工厂

  protected SAXParserFactory getSaxParserFactory() {
    return defaultSaxParserFactory;
  }
}

由解析器父类Parser的源码我们可以看出,它的主要特征是自身单例,生成静态XML解析器工厂实例(SAXParserFactory),然后为解析处理父类Parse提供XML解析器(SAXParser )并生成新的解析处理父类Parse的实例。

那么,接下来我们就看看解析器父类Parse:

//解析处理父类Parse继承了SAX2的默认XML事件处理基类<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值