• Groovy In Action 笔记 (1) -- 概述


    1. 基于JVM的一种强类型的动态语言,因此可以在同一个项目中与Java混合使用.

    2. 可以使用Groovyc编译为 .class 文件,与Java一致(Javac编译 .java文件为 .class文件).

    3. 除了将.groovy文件编译为.class 文件,groovy提供了另一种方式将groovy内容加载到jvm供JIT编译:通过groovy class loader直接加载 .groovy 文件.

      

    4. Groovy是如何实现动态语言特性的? 相当于在Java语言基础上加了一层MOP(Meta Object Protocol), 可以理解为Groovy中的任何方法/属性调用均被中间层根据某些规则(系统定义,或者用户定义均可)进行了处理,处理后再调用实际的方法/属性,比如:当调用某个实例中不存的方法时,中间层可以将此不存在的方法(根据规则)转变为某个已经存在的方法,得到另一个结果.此特性配合groovy中的closure+map可以创造一些领域特性语言(DSL),如Gradle,Jenkins-Pipeline等.

      

    5. Groovy编译器编译Groovy脚本时,并不是逐行进行,而是全文解析成AST(抽象语法树),然后写成.class文件.这与Python等脚本语言的解释器的逐行解释不同.

    6. Groovy脚本可以有三种不同的代码形式:

    (1) 脚本中定义唯一一个与脚本文件同名的class,并含有一个static void main(String[] args)方法,和Java一致

    (2) 脚本文件中没有class定义,只有一些groovy代码

    (3) 脚本文件中既有class定义,且class的名字与脚本名字不同,也有常规的groovy语句

    7. Groovy所有的类均实现了GroovyObject接口(相当有java中所有类均继承自Object类). groovyc编译 .groovy 文件后,会自动实现此接口.Groovy中的所有方法调用(第四点提到的中间层) 正是通过GroovyObject中的invokeMethod方法,配合MetaClassRegistry等实现的.具体逻辑后续详细介绍.

  • 相关阅读:
    Linux写时拷贝技术(copy-on-write)
    crontab使用进程锁解决冲突
    Better Linux Disk Caching & Performance with vm.dirty_ratio & vm.dirty_background_ratio
    精确度量Linux下进程占用多少内存的方法
    在Linux系统的服务器上使用Memtester进行内存压力测试
    How to speed up insertion performance in PostgreSQL
    Mongo的备份和恢复(mongodump 和mongorestore )
    MongoDB:删除操作
    MongoDB插入数据的3种方法
    Centos 软连接和硬链接
  • 原文地址:https://www.cnblogs.com/FsharpZack/p/13773087.html
Copyright © 2020-2023  润新知