我是 Groovy 编程语言的新手,我正在尝试完全理解它的动态特性和功能。我所知道的是,在 Groovy 中以最基本的形式创建的每个类看起来都是这样的(实现 GroovyObject 并扩展 java Object)。
public class Foo implements groovy.lang.GroovyObject extends java.lang.Object { }
Groovy 对象还包含一个扩展MetaObjectProtocol的MetaClass。正是这个类层次结构提供了一些 Groovy 的动态功能。这包括自省(getProperties、getMethods)或拦截方法(invokeMethod、missingMethod)的能力。
我也了解 Groovy 中可用的不同类型的元编程。这些使您能够在运行时或编译时添加或覆盖功能。
- 运行
- 类别
- Expando / MetaClass / ExpandoMetaClass
- 编译时间
- AST 转换
- 扩展模块
现在,我们可以解决这个问题的实质。当某人或一本书提到 Groovy 中的“元对象协议”时,我们是在谈论特定的类或事物的集合。我很难掌握没有定义或一成不变的东西。我的一本书将其定义为
协议是规则和格式的集合。元对象协议 (MOP) 是 Groovy 运行时系统如何处理方法调用请求以及如何控制中间层的规则集合。协议的“格式”由各自的 API 定义,
我也有 Venkat 的 Programming Groovy 2 书,其中有一个定义此方法查找过程的图表。所以我猜这是我们如何请求方法的规则(至少是 POGO,我理解 POJO 是不同的)。
无论如何,我认为我正在走正确的道路,但我觉得我仍然想念那个“啊哈”的时刻。任何人都可以填写我所缺少的内容吗?或者至少告诉我我在这里的胡言乱语是有道理的:)谢谢!