OGNL基本结构

 

“从一个对象获取值与为一个对象设置值”是一个看似非常简单,而实际却是非常复杂的一个问题,OGNL站在一个很高的层次(语言级层次),对此问题的解决给出一个比较完美的方案,并对此问题的内涵进行扩充。整个OGNL的架构并不十分的复杂,而其中的一些算法相对却是比较复杂的,因为波及抽象语法树的问题,但这并不影响对整个OGNL结构的分析。整个OGNL结构主要由以下几个部分组成:

1           抽象语法树结点抽象体系(Node)

因为OGNL是从表达式语言的角度来解决问题,所以抽象语法树结点的抽象是必不可少的,树中的结点分为各种各样的情况,比如常量,变量,运算符都需要抽象成语法树中的结点。虽然此体系中涉及的类比较多,但类的相容与内聚都很高,比较容易理解。此体系结构中的类对象是对OGNL表达式语言解析后生成的实体,语言解析的算法相对较为复杂,主要由OgnlParser这个类负责,此类是一个JavaCC解析类,对于其中的一些难于理解的地方可以不予考虑,只需要知道使用此类可以将一个OGNL表达式解析成一棵抽象的语法树,有了这棵树就有了“从一个对象获取值与为一个对象设置值”的基础

2           属性访问器抽象体系(PropertyAccessor)

访问一个对象的属性这是问题的本源,因此一个对象属性的访问进行抽象也是必不可少的,并且OGNL在原来属性内涵的基础上进行了扩充,不仅是针对标准的javabean对其它的数据类型象map、list等集合数据类型扩充了属性的含义,因此该接口的实现也不在少数。表达式被解析成抽象语法树后,其中有一个部分结点将被分解为对象的基础属性,而这些基础属性的值的设置与获取将会依赖这些属性访问器,如果想将这些属性访问器应用于其它程序,最好关注OgnlRuntime这个类,它对相关的功能进行封装与缓存,可以说是一个比较好的工具类

3           元素访问器(ElementsAccessor)

此访问器主要对集合类元素的遍历提供了一个规范的接口,如果让它作为工具类来使用,我认为作用不是很大,如果有需要使用的访问仍然可以通过OgnlRuntime来进行使用

4           OGNL的对外接口,

其实OGNL对外的应用接口本身并不复杂,主要集中在Ognl这个静态类,它看起来象是一个工具类的构造,而实际是对外的使用接口,要想使用OGNL主要是使用这个类,理解其中的一个方法参数的含义,例如什么是上下文,什么是根等,如果会使用此类基本就会使用OGNL工具包了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值