我是靠谱客的博主 沉静缘分,最近开发中收集的这篇文章主要介绍Groovy源代码分析(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2021SC@SDUSC

Groovy 是 用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。
Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行 Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 Groovy 与 Java 代码的互操作很容易。(注意:不是指Groovy替代java,而是指Groovy和java很好的结合编程)

首先配置好Groovy环境,这里就不多阐述了。

我们利用IDEA新建一个Groovy项目,写一个简单的Groovy程序,该程序会打印"Hello world"

在后台,所有的groovy代码都运行在JVM中并且使用的是java对象模型,不管你写的是groovy类,或者是groovy脚本,它们都作为java类在JVM中运行。 在JVM中运行groovy类有两种方式:

  1.  使用groovyc编译所有的*.groovy为java的*.class文件,把这些*.class文件放在java类路径中,通过java类加载器来加载这些类。
  2.  通过groovy的类加载器在运行时直接加载*.groovy文件并且生成对象,在这种方式下,没有生成任何*.class,而是生成了一个java.lang.Class对象的实例。

我们将HelloWorld.groovy文件编译成class文件。

groovyc HelloWorld.groovy

 可以用java命令调用JVM运行groovy编译出来的HelloWorld.class文件:

我们可以直接在IDEA中反编译该class文件,得到如下Java代码:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

import groovy.lang.GroovyObject;
import groovy.lang.MetaClass;
import groovy.transform.Generated;
import groovy.transform.Internal;
import java.beans.Transient;
import org.codehaus.groovy.runtime.callsite.CallSite;

public class HelloWorld implements GroovyObject {
    @Generated
    public HelloWorld() {
        CallSite[] var1 = $getCallSiteArray();
        super();
        MetaClass var2 = this.$getStaticMetaClass();
        this.metaClass = var2;
    }

    public static void main(String... args) {
        CallSite[] var1 = $getCallSiteArray();
        var1[0].callStatic(HelloWorld.class, "Hello world");
    }

    @Generated
    @Internal
    @Transient
    public MetaClass getMetaClass() {
        MetaClass var10000 = this.metaClass;
        if (var10000 != null) {
            return var10000;
        } else {
            this.metaClass = this.$getStaticMetaClass();
            return this.metaClass;
        }
    }

    @Generated
    @Internal
    public void setMetaClass(MetaClass var1) {
        this.metaClass = var1;
    }
}

是不是看起来有些复杂?没关系我们会一点点搞懂它的。其实这里最关键的是这三个函数$getCallSiteArray(),$getStaticMetaClass()以及callStatic(Object, Object),我们会在之后的文章中逐步揭开他们的面纱。

最后

以上就是沉静缘分为你收集整理的Groovy源代码分析(一)的全部内容,希望文章能够帮你解决Groovy源代码分析(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部