Groovy中的元对象协议(MOP)

Dan*_*ega 7 groovy metaobject

我是Groovy编程语言的新手,我正在努力完全理解它的动态特性和功能.我所知道的是,在Groovy中以最基本的形式创建的每个类都看起来像这样(实现GroovyObject并扩展java Object).

public class Foo implements groovy.lang.GroovyObject extends java.lang.Object { }
Run Code Online (Sandbox Code Playgroud)

Groovy对象还包含一个扩展MetaObjectProtocolMetaClass.正是这个类层次结构提供了一些Groovy的动态功能.这包括内省自身(getProperties,getMethods)或拦截方法(invokeMethod,missingMethod)的能力.

我也了解Groovy中可用的不同类型的元编程.这些使您能够在运行时或编译时添加或覆盖功能.

  • 运行
    • 分类
    • Expando/MetaClass/ExpandoMetaClass
  • 编译时间
    • AST转换
    • 扩展模块

现在我们可以解决这个问题.当某人或某本书引用Groovy中的"Metaobject协议"时,我们会讨论特定类或事物集合.我很难把握一些没有定义或一成不变的东西.我的一本书将其定义为

协议是规则和格式的集合.元对象协议(MOP)是Groovy运行时系统如何处理方法调用请求以及如何控制中间层的规则的集合.协议的"格式"由各自的API定义,

我还有Venkat的Programming Groovy 2书,其中有一个定义了这个方法查找过程的图表.所以我猜这是我们如何请求方法的规则(至少是POGO,我理解POJO是不同的).

在此输入图像描述

无论如何我认为我走的是正确的道路,但我觉得我仍然缺少那个"啊哈哈"的时刻.任何人都可以填写我所缺少的内容吗?或者至少告诉我这里的ramblings有点意义:)谢谢!!

Dan*_*ega 5

这就是答案。“元对象协议(MOP)是Groovy运行时系统如何处理对方法调用的请求以及如何控制中间层的规则的集合。” 一旦您了解了该过程,便会经历一个方法调用及其附带的API,我认为这一切都说得通。我只是在想这一切。谢谢!!