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类有两种方式:
- 使用groovyc编译所有的*.groovy为java的*.class文件,把这些*.class文件放在java类路径中,通过java类加载器来加载这些类。
- 通过groovy的类加载器在运行时直接加载*.groovy文件并且生成对象,在这种方式下,没有生成任何*.class,而是生成了一个java.lang.Class对象的实例。
我们将HelloWorld.groovy文件编译成class文件。
1groovyc HelloWorld.groovy
可以用java命令调用JVM运行groovy编译出来的HelloWorld.class文件:
我们可以直接在IDEA中反编译该class文件,得到如下Java代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45// // 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源代码分析(一)内容请搜索靠谱客的其他文章。
发表评论 取消回复