MetaClassRegistry 维护着class和meta=class之间的对应关系。那么这个映射表中键值对又是在什么时候添加的喃?
有两种情况,比如我们的代码中主动地设置,比如我们使用了ExpandoMetaClass来扩展java类,另外一种情况是就是Groovy本身的Class是何时与其MetaClass挂钩的?
之前有猜想过,这种映射关系是在加载了groovy的Class之后,也就是装载了groovy源文件分析出class之后便创建了其对应的
metaclass的映射。但是我翻了Groovy
源码没有发现在加载class的时候进行metaclass设置。有一段时间没有找到痕迹,今天突然猜想莫非是在获取的时候做了设置,这是很多缓存策略的
实现方法,只有在第一次访问的时候才去正在设置。
代码还真是隐藏得深入,从GroovyObjectSupport的getMetaClass入手,经过MetaClassRegistry的包
装,最终是从ClassInfo的内部类ClassInfoSet中获得的。ClassInfoSet最终继承自
AbstractConcurrentMap,AbstractConcurrentMap的getOrPut方法便是在没有的情况下创建一个值并返回。
也就是说第一次寻找一个Groovy class
的metaclass的时候找不到,便会创建一个与之对应。只不过这个创建和放置的过程隐藏在了基类中。
(下一篇介绍MetaClass的invokeMethod方法的实现)
分享到:
相关推荐
Groovy是一种动态、灵活的编程语言,它设计用于Java虚拟机(JVM)上运行,并且与Java代码无缝集成。Groovy的语法简洁且富有表达力,使得开发过程更为高效。在Java生态系统中,Groovy常被用于构建脚本、自动化任务、...
### Groovy轻松入门——Grails实战基础篇 #### 搭建Grails环境及创建Grails Demo程序 **Groovy**是一种面向对象的编程语言,它运行于Java平台上,能够与Java代码无缝集成。而**Grails**则是一款基于Groovy的高性能...
这些知识点是对Groovy基础语法的一个大致概述,而文件中的内容则展示了如何在实际代码中应用这些语法。由于文件内容有些混乱,并且含有重复的词汇和一些扫描错误,以上总结的知识点基于对Groovy语言的理解和部分可...
Groovy基础教程源码涵盖了Groovy语言的各个方面,是学习和理解Groovy语言的宝贵资源。下面将详细阐述Groovy的一些核心知识点。 1. **动态类型与静态类型**: Groovy支持动态类型,这意味着变量在声明时无需指定...
元编程在Groovy中主要通过`MetaClass`接口和`ExpandoMetaClass`类来实现。 `MetaClass`是Groovy中的一个核心概念,它是每个Groovy对象的元数据容器,存储了对象的方法、属性以及它们的调用规则。通过`MetaClass`,...
Groovy 基础语法 Groovy 是一种基于 Java 平台的高级编程语言,它融合了 Ruby、Python 和 Smalltalk 的一些最有用的功能,同时保留了基于 Java 语言的核心语法。Groovy 提供了更简单的替代语言,且几乎不需要学习...
1. **MetaClass**: MetaClass是Groovy MOP的核心,它是任何Groovy对象的元数据容器。MetaClass存储了对象的方法、属性以及如何调用这些方法和属性的信息。你可以为任何对象或类动态地替换其MetaClass,从而改变其...
1. **创建Groovy文件**:使用文本编辑器创建一个名为hello.groovy的文件,并输入以上代码。 2. **执行脚本**:打开命令行窗口,导航至包含hello.groovy文件的目录,然后输入`groovy hello`来运行脚本。 #### 四、...
groovy 创建xml,并生成xml文件的代码
最后,学习Groovy的最佳实践,如如何有效地利用元编程,何时使用静态类型以提高性能,以及如何编写易于理解和维护的代码,这些都是提升Groovy开发技能的重要部分。 通过深入学习和实践这份"Groovy学习资料"中的内容...
书中可能涵盖Groovy的基础概念、进阶特性、最佳实践,以及如何在实际项目中应用Groovy。 总的来说,这个最新的Groovy开发包是学习和精通Groovy的宝贵资源,无论是为了个人兴趣还是职业发展,都能从中受益匪浅。通过...
《Show Your ToolBox——锋利的Groovy》 在IT领域,工具的选择和使用往往直接影响到工作效率和项目质量。本文将深入探讨Groovy这门强大的动态编程语言,它以其灵活性和与Java的紧密集成,成为了许多开发者的得力...
例如,书中可能涵盖了如何使用AST(抽象语法树)转换来修改代码的执行过程,以及如何利用元类(MetaClass)来自定义类的行为。 #### 4. Groovy与Java的集成 由于Groovy与Java的高度兼容性,本书特别强调了如何在Java...
1. **基础语法**:源代码中包含了Groovy的基础语法示例,如变量声明、流程控制(if-else、switch-case、for、while循环)、函数定义和调用、类与对象的创建等。这些例子可以帮助初学者快速掌握Groovy的基本编程结构...
- **面向对象编程**:Groovy不仅完全兼容Java的对象模型,还引入了许多增强特性,比如元类(MetaClass)、代理(Delegation)等。 - **元编程**:Groovy的元编程能力非常强大,可以通过反射、AST转换等方式在运行时...
如果在新建项目选项中出现了与 Groovy 相关的选择项,如 “Groovy Project” 或 “Groovy Class”,则说明 Groovy 插件已成功安装。 #### 二、Eclipse 中 Groovy 的入门使用 接下来,我们来详细介绍如何在 Eclipse...
3. 加载并执行Groovy脚本:通过GroovyClassLoader的`parseClass()`方法解析Groovy源码,然后使用`newInstance()`方法创建脚本实例,最后通过`invokeMethod()`方法执行脚本中的方法。 在Java与MongoDB的交互中,我们...
10. **领域特定语言(DSL)**:Groovy的DSL能力使其成为创建定制语言的利器,可以轻松地为特定应用领域创建简洁的表示形式。 通过学习以上各个方面,你可以逐步掌握Groovy并利用它提高开发效率,无论是编写简单的...
Groovy是一种动态、灵活的编程语言,它是Java平台上的一...通过学习和实践,你可以提高开发效率,创建出更具灵活性和可维护性的代码。这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。