加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy MOP实现mini-language 如传说中Java7.0的XML嵌入式语法

发布时间:2020-12-14 17:02:03 所属栏目:大数据 来源:网络整理
导读:?? 作者:江南白衣???? ??? Groovy的Team Leader-- Guillaume Laforge说,MOP(Meta Object Protocol)是他最喜欢的Groovy特性。 ??? ????MOP是对属性、方法进行拦截解释的简单机制,intercept 已经因为AOP而被大家熟悉。 ??? Groovy的类都继承于GroovyObject

?? 作者:江南白衣????

??? Groovy的Team Leader-- Guillaume Laforge说,MOP(Meta Object Protocol)是他最喜欢的Groovy特性。
???
????MOP是对属性、方法进行拦截解释的简单机制,intercept 已经因为AOP而被大家熟悉。
??? Groovy的类都继承于GroovyObject,GroovyObject有get/setProperty()和invokeMethod()两个函数,当客户调用不存在的属性和方法时,就会交由这两个函数来处理,在Ruby里,这个方法被更贴切的命名为method_missing()。Groovy类可以通过重载这两个函数,加入自己的hook和behavior,比Java简单的多的实现ProxyDelegator。

? ? 而更重要的是,MOP函数可以充当领域语言解释者的角色,拦截一些存在于领域语言的而在Class里根本没有定义的属性、方法来进行解释,这就是Groovy里XML嵌入式语法的魔法根源
????IBM DW有一篇专门的文章 :《PRACTICALLY mini-languages and MOPs Of Groovy:》
???? 比如如下的xml

? < shop >
???
< book? name ="foo" >
?????
< writer > 庄表伟 writer>
???
book>
?
shop>

??? 可以用groovy这样访问

????println?node.book.writer.text()

???? node类当然没有book,writer这样属于领域语言的属性,但通过重载getPropety(String name)函数,node类可以把对book,writer属性的访问,转换成相应DOM节点的访问。
??? 实现请参看org.codehaus.groovy.sandbox.util.XMLList类的public Object getProperty(final String elementName)函数。

??? Guillaume Laforge说,It's an aspect of Groovy which makes the language very powerful,but rare are those who really know and use it.?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读