首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Commons-digester:规则引擎全范例

2013-07-09 
Commons-digester:规则引擎全实例??? 这个文件是告知digester如何解析和映射table-rules.xml,它的主要作

Commons-digester:规则引擎全实例

??? 这个文件是告知digester如何解析和映射"table-rules.xml",它的主要作用就是声明XML与javabean映射关系。这个xml中的格式是已经约定的,你不能随意创建自己的节点元素。

??? 1) <pattern>的value属性为需要匹配的table-rules.xml中的元素节点名称,比如“rules”。

??? 2) <object-create-rule>表示“遇到”指定pattern的节点,将会创建一个java对象,此对象的为className类型。被创建的对象,将放在解析stack的顶部。

??? 3) <set-properties-rule>表示“对stack顶”的对象进行“属性赋值”操作,比如<rule>节点使用“set-properties”将会导致“id”属性的setter方法被调用。

??? 4) <set-next-rule>获取将“解析stack顶”的对象(stack.pop()),并执行“top-element”对象的“methodname”指定的方法;(实例中讲解)

??? 5) <call-method-rule>调用“解析stack顶”的对象的指定方法,参数值为当前pattern匹配的节点的值,paramcount为“方法的参数列表的个数”,0表示“只有一个参数”的方法,paramtypes为“方法的参数列表”的类型(","分割),如果paramtypes未声明,将会执行无参的方法。

?

三.Java实例:

??? 1) 测试类:

??? 2) TableRulePool.java:用来保存XML解析的结果,所有的rules列表,它做为digester解析时的“top-element”,当解析table-rules.xml时,遇到“<rule>”节点时,将会创建TableRule对象,并根据<set-next-rule>中指定的put方法,将tableRule实例放入列表中。

??? 2) ConfigRuleSet.java:使用java设定“规则”解析方式,取代table-rule-pattern.xml

public class ConfigRuleSet extends RuleSetBase {@Overridepublic void addRuleInstances(Digester digester) {//digester.push(TableRulePool.getInstance());digester.addObjectCreate("*/rule", "com.test.tableRule.object.TableRule");digester.addSetProperties("*/rule");digester.addSetNext("*/rule", "put");digester.addCallMethod("*/rule/table", "setTable",0,new String[]{"java.lang.String"});digester.addCallMethod("*/rule/size", "setSize",0,new String[]{"java.lang.Integer"});digester.addCallMethod("*/rule/type", "setSize",0,new String[]{"java.lang.String"});digester.addCallMethod("*/rule/delimiter", "setDelimiter",0,new String[]{"java.lang.String"});digester.addCallMethod("*/rule/strategy", "setStrategy",0,new String[]{"java.lang.String"});}}

??? 可以看出java代码和xml的声明的方式很类似,顺序也需要一样。

?

--END--

热点排行