grails - 为什么 GORM 使用 methodMissing

标签 grails groovy metaprogramming grails-orm abstract-syntax-tree

当我读到here ,grails 正在使用 methodMissing 将 GORM 方法注入(inject)域类,但是说过 methodMissing 的执行成本很高,因为它只发生在调度失败的情况下,为什么这些方法不通过元类或 AST 转换注入(inject)?有什么线索吗?

最佳答案

使用 methodMissing 并没有那么昂贵,因为 Grails 仅在首次执行未找到的方法时才在 MOP 中创建新方法。后续执行发生在新创建的方法上。

考虑一个具有许多属性的域类。如果所有的 findBy*、findAllLBy*、countBy* 等排列都应该在编译时创建,那么这些类很容易变得非常大。通过使用方法缺失,只会创建在运行时实际使用的方法。

关于grails - 为什么 GORM 使用 methodMissing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13699525/

相关文章:

grails - 在 Grails 中进行数据库迁移的良好工作流程是什么?

grails - 重装在grails3.2.9中不起作用

jquery-ui - 在jquery标签中显示Grails域

docker - 需要知道如何使用 Groovy 自动化 Docker 构建和运行时

c++ - 使用概念或 SFINAE 检查类是否具有带有 std::array 参数的模板化成员函数

Python Astroid (Pylint) 当类通过工厂时如何模拟继承?

c++ - 如何解压缩多维 c 样式数组类型并声明 std::array 实例?

spring - 在 Grails 的命令对象中获取 session

grails - 在 GORM 中重命名复合外键

java - 使用 groovy 运行 hadoop wordCount 示例