`
叶落黄昏
  • 浏览: 17603 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Groovy基础与实践——语言模型序

阅读更多

    很好奇GROOVY是如何在JAVA语言的基础上平添了如此之多的强大功能和语言特性。翻看了一些GROOVY的源代码。语言的特性,离不开语言底层模 型的支持,在构建好自己的语言模型之后,接下来需要的就是形式化的东西,也就是语法,遵循语法编写代码,以用编译器构建出既定的语言模型体系下的字节码, 然后再JVM机上无差别于JAVA代码一样运行,我理解的Groovy就是这样。


    GROOVY可以作为脚本来运行,即Script对象,也可以作为类似JAVA的Class来运行,不管是以Script方式运行还是说作为Class 方式。Groovy编译之后的类都是统一实现了GroovyObject接口。GroovyOjeject定义了invokeMethod方法,定义了属 性的GETTER和SETTER方法,定义了元类的GETTER和SETTER方法等利用GROOVY语言特性的基本方法。GroovyOjeject为 什么是接口不是类,原因在于Groovy最终编译成为java对象,JAVA对象不支持多继承,如果GroovyOjeject声明为类,而Groovy 的class也必须继承直接或者间接继承自GroovyObject,这样,声明Groovy类就不能继承自其它的JAVA类了,这样就直接影响了 GROOVY与JAVA的兼容性。


    GROOVY语言模型中GroovyOjeject不是类,但是GROOVY提供了该接口的一个支持类GroovyObjectSupport,该类提 供了一个默认实现,供不需要继承自其它JAVA类来继承,比如语言内部的很多实现类以及由松散的脚本代码构建出来的Script类。


    Script对象由开发人员的松散代码构建而来,编译器会将松散代码集中到Script定义的run方法中。其它的方法作为私有方法。开发人员编写松散 的groovy代码,相当于创建了一个继承自Script类的子类。脚本代码可以和运行时的环境作为整合,从上下文环境中读取信息。这一特性的实现基于组 合在Script中的Binding对象。Script的binding对象可以动态设置。GroovyObjectSupport默认实现中,属性的读 写都是针对元类的,Script重载了添加该实现,属性的读写都是针对binding对象(当然除了binding属性和metaclass两个属性本 身)。Script还重写了invokeMethod方法,当调用一个方法的时候,首先调用supper中的方法,当不存在该方法的时候,就从 binding中查询同名的闭包对象。如果查询到了执行该闭包。另外,Script提供了很多默认的实现的方法,比如 print,pringln,evaluate,run。


     Binding类继承自GroovyObjectSupport,拥有Groovy类的通用特性,Bingding类本质上是对Map进行包装,默认情况 下,是采用LinkedHashMap来作为内部数据结构。放在Binding中的信息称之为variable。


     MetaClass,MetaMethod,MetaProperty公共构建了Groovy的动态特性。

     MetaClass定义了invokeMethod方法,定义了attribute,property,metaMethod的读写方法,以及 invokeMissingMethod,invokeMissingProperty方法。当然还包括initialize方法,该方法用以实现初始 化,在调用了改方法之后,就不能再向MetaClass中添加方法,属性了,只有在成功调用该方法之后才能够方位其中的属性方法。该方法建议在实现的时候 加锁,以保证原子性。

     说道MetaClass就不得不提到MutableMetaClass,MutableMetaClass继承自MetaClass,额外定义了添加新实例方法,新元方法,新静态方法,新MetaBeanProperty。

     MetaClassImpl为例来讲讲MetaClass的大致实现类结构。MetaClassImpl实现了MetaClass和 MutableMetaClass,也就是说MetaClassImpl是可以添加新方法的MetaClass类. MetaClassImpl包含了 MetaClassRegistry元类注册器的引用,一些标识信息,是否是GroovyObject对象,是否是Map对象

未完待续。。。

接下来,写一下关于Binding类,MetaClass,MetaMethod,MetaProperty

分享到:
评论

相关推荐

    groovy 原版杂志 十月

    在Groovy原版杂志的十月刊中,首先引入了“function(groovy)”这一主题,它旨在深入探讨Groovy编程语言的核心概念与实践技巧。Groovy作为一种灵活的脚本语言,支持多种编程范式,包括面向对象、函数式编程等。这部分...

    Beginning Groovy and Grails, From Novice to Professional

    本书主要面向初学者,旨在帮助读者通过实践学习敏捷Web开发的核心技术——Groovy和Grails。Groovy是一种基于Java平台的动态编程语言,而Grails则是基于Groovy的Web应用框架。 #### 二、核心知识点 ##### 1. Groovy...

    Java JDK 6学习笔记——ppt简体版

    - **Scripting API**:引入了JSR 223,支持脚本语言与Java的交互,如JavaScript、Groovy等。 - **NIO.2(New I/O 2)**:增加了对异步I/O的支持,提供FileChannel、Path和Files类,便于文件操作和流处理。 - **...

    都脚本一下,不必要重新部署了——jsp当前端控制器?

    4. groovy_exe.jsp - 这可能是用Groovy语言编写的JSP文件,展示了将脚本语言集成到JSP中,进一步增强其功能和灵活性。 5. ftl.properties - 这可能是FreeMarker配置文件,用于设置模板引擎的一些属性和行为。 6. ...

    安卓Android源码——通过jdts.jar连接SQLSEVER2008.zip

    本资源“安卓Android源码——通过jdts.jar连接SQLSEVER2008.zip”提供了一个示例,展示了如何在Android应用程序中使用jdts.jar驱动程序来实现与SQL Server 2008的连接。jdts.jar是JDBC-ODBC桥接器的一个版本,适用于...

    Getting-Started-with-Grails-Chinese.rar_Getting Started_grails

    《Getting Started with Grails》是一本专为初学者设计的指南,旨在介绍使用Groovy语言构建的敏捷Web开发框架——Grails。Grails是基于Java平台的,它利用了Groovy的简洁性和灵活性,为开发者提供了高效且强大的工具...

    Grails权威指南

    第2章 groovy动态语言  2.1 groovy和java的异同  2.1.1 相同点  2.1.2 不同点  2.2 基础知识  2.1.1 类声明 . 2.2.2 语言级断言(assertion)  2.2.3 groovy字符串  2.2.4 闭包...

    《Learn Java for Web Development》这本书是针对想要使用Java进行Web开发的读者编写的

    最后,作者还会讨论业界的最佳实践,并通过一个真实的案例——书店电子商务应用,来演示如何将所学应用到实际项目中。此外,书中还将探索其他Java Web框架,如Groovy/Grails和Scala/Play 2,让读者了解更多的选择和...

    Mule in action下载(英文版)

    《Mule in Action》一书深入探讨了Mule——一个轻量级消息框架与高度分布式的对象代理系统,为读者提供了全面的理论与实践指导。本书由David Dossot和John D'Emic共同撰写,旨在帮助开发者掌握Mule的核心功能与配置...

    一步一步学grails(1)

    Grails,作为一个基于Groovy语言的开源Web应用框架,以其高效、灵活和强大的特性在IT行业中占有一席之地。本教程旨在通过一个项目驱动的方式,引导初学者一步步走进Grails的世界。 首先,我们需要创建一个新的...

    neuronal-network:机器学习和神经网络的学习项目

    这是一个基于Groovy编程语言的学习项目,旨在帮助开发者理解并实现神经网络模型。通过这个项目,我们可以学习如何构建神经网络,以及如何利用它来进行预测和分类任务。 1. **神经网络基础**: - 神经网络是一种...

    Struts.2权威指南--基于WebWork核心的MVC开发.0007.pdf

    相比于Struts 1.x,Struts.2具有更强大的功能和更高的灵活性,它支持多种语言(如Java、Groovy、Scala等),并且通过使用拦截器(Interceptor)机制,提供了更丰富的功能扩展性。此外,Struts.2还内置了对AJAX的支持...

    ratpack-core-0.5.zip

    今天我们将深入探讨两个开源项目——"ratpack-core-0.5.zip"和"gll-combinators.zip",它们分别代表了高性能Web应用框架和语言解析技术的前沿实践。 首先,让我们聚焦于"ratpack-core-0.5.zip"。Ratpack是一个用于...

    掌握Java生态:Maven与Gradle的项目管理之道

    Gradle 是另一个流行的 Java 构建工具,它基于 Groovy 语言,提供了一个灵活的 DSL (领域特定语言) 来定义构建逻辑。Gradle 的特点是速度快、易于使用,并且能够很好地与其他工具集成。 Gradle 同样支持依赖管理和...

    基于Geb的Web自动化测试的原理与实践

    【Geb】是一个基于Groovy语言的开源自动化测试框架,专为Web应用程序设计。它集成了WebDriver的强大功能,能够跨浏览器进行自动化测试,确保Web应用在不同环境下的兼容性。同时,Geb利用jQuery的选择器简化了网页...

Global site tag (gtag.js) - Google Analytics