关于 Controller 等也可能会问同样的问题。编译器如何找到 grails 工件神奇地具有的方法/字段?我正在尝试用纯 Java/Spring 设计类似的东西,并且想知道如何完成这样的事情。
最佳答案
How does the compiler find the methods/fields that grails artifacts magically have?
编译器并没有真正找到方法,至少对于所有查询机制来说是这样。例如,动态查找器不会在编译时解析。它们在运行时通过动态调度进行处理。 where
查询是在编译时设置的,“如何”涉及一些,但简而言之,我们有编译时 AST 转换,用于查找对静态 where
方法的调用在域类上,当遇到其中之一时,编译时的 AST 转换会生成在运行时执行查询所需的代码。像 get(id)
和 list()
这样的方法是在 Grails 在编译时添加到所有域类的特征中定义的。
I am trying to design something similar in pure Java/Spring and would like to know how I can accomplish something like this.
我上面描述的方法都没有可以用 Java 实现的直接对应方法。所有这些技术都依赖于 Groovy 提供的功能。
HTH
编辑
当前问题的标题是“Grails 域类从哪里获取查询方法?”所以我在域类的查询方法的上下文中专门回答了这一问题。对于更一般的“编译器如何找到 grails 工件神奇地具有的方法/字段?”,上面的评论仍然普遍适用。
关于java - Grails 域类从哪里获取它们的查询方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39411567/