groovy - Groovy 中的元对象协议(protocol) (MOP)

标签 groovy metaobject

我是 Groovy 编程语言的新手,我正在尝试完全理解它的动态性质和功能。我所知道的是,在 Groovy 中创建的每个类的最基本形式都是这样的(实现 GroovyObject 并扩展 java Object)。

public class Foo implements groovy.lang.GroovyObject extends java.lang.Object { }

Groovy 对象还包含 MetaClass延伸MetaObjectProtocol 。正是这个类层次结构提供了 Groovy 的一些动态功能。这包括自省(introspection)(getProperties、getMethods)或拦截方法(invokeMethod、missingMethod)的能力。

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

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

现在已经解决了一些问题,我们可以进入这个问题的核心了。当某人或一本书提到 Groovy 中的“元对象协议(protocol)”时,我们谈论的是一个特定的类或一组事物。我很难掌握一些没有定义或固定不变的东西。我的一本书将其定义为

A protocol is a collection of rules and formats. The Meta-Object-Protocol (MOP) is the collection of rules of how a request for a method call is handled by the Groovy runtime system and how to control the intermediate layer. The "format" of the protocol is defined by the respective APIs,

我还有 Venkat 的《Programming Groovy 2》一书,其中有一个定义此方法查找过程的图表。所以我猜测这就是我们请求方法的规则(至少是 POGO,我知道 POJO 是不同的)。

enter image description here

无论如何,我认为我正在走正确的道路,但我觉得我仍然怀念那个“啊哈”的时刻。谁能补充我所缺少的东西吗?或者至少告诉我我在这里的漫无目的是有道理的:)谢谢!!

最佳答案

这就是答案。 “元对象协议(protocol) (MOP) 是 Groovy 运行时系统如何处理方法调用请求以及如何控制中间层的规则集合。”一旦您了解了方法调用的流程以及随之而来的 API,我认为这一切都有意义。我只是想太多了。谢谢!!

关于groovy - Groovy 中的元对象协议(protocol) (MOP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19608035/

相关文章:

python - 如何最好地从 groovy 中的键列表/值列表中获取 map ?

Jenkins 管道中的正则表达式

unit-testing - Qt 中是否可以对私有(private)方法进行单元测试(访问)?

qt - 重载qt属性

android - Google Appengine Android gradle任务

grails - 使用拦截器时是否需要 render()?

grails - 如何获取 Grails 域对象的属性的类型(类)?

java - 如何从 PersistentSet 中获取可能为空的元素类型

c++ - 为什么staticMetaObject.className()返回的是父类的类名?