Groovy MOP实现mini-language 如传说中Java7.0的XML嵌入式语法
2005-08-17 12:18
316 查看
作者:江南白衣
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简单的多的实现Proxy和Delegator。
而更重要的是,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.
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简单的多的实现Proxy和Delegator。
而更重要的是,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.
相关文章推荐
- Groovy MOP实现mini-language 如传说中Java7.0的XML嵌入式语法
- Liferay7.0使用 language key/value 方式实现多语言切换
- java.beans包里面的两个类简单地实现XML解析
- java解析xml模拟容器的实现 如spring等
- 使用JAXB实现JAVA对象和XML字符串的互相转换实例
- java用xstream实现xml与实体的互相转化
- java+xstream实现xml序列化(XStream轻松转换xml和java对象)
- JavaWEB——S01E03_XML语法
- 轻量级C语言实现的minixml解析库入门教程
- XML入门之一:XML语法和java下的DOM操作
- 理解Spring框架---利用,xml,java反射简单实现Spring
- 使用XStream是实现XML与Java对象的转换(4)--转换器
- JAVA 基础语法——开发环境以及J2SE代码实现
- 在java中实现C#语法里的按引用传递参数的方法
- 编译原理语法分析实验(Java实现)
- 出现错误:Unable to load configuration. - action - file:/E:/Java/Tomcat7.0/apache-tomcat-7.0.68-windows-x64/apache-tomcat-7.0.68/webapps/SSH2Integrate/WEB-INF/classes/struts.xml:8:43
- java 中jaxb实现对象到xml互相转换
- php 实现 java com.sun.org.apache.xml.internal.security.utils.Base64 Byte数组加密
- javaweb之xml语法