Java Grails域类的查询方法来自哪里?

Java Grails域类的查询方法来自哪里?,java,grails,Java,Grails,同样的问题也可以问控制器等。编译器如何找到grails工件神奇地拥有的方法/字段?我正试图在纯Java/Spring中设计类似的东西,并想知道如何实现类似的功能 编译器如何找到grails工件所使用的方法/字段 神奇地拥有 编译器并没有真正找到方法,至少不是所有查询机制都能找到。例如,动态查找程序不会在编译时解析。它们在运行时通过动态分派进行处理where查询是在编译时装配的,其中“how”有点复杂,但简而言之,我们有编译时AST转换,用于在域类上查找对静态where方法的调用,以及在遇到其中一

同样的问题也可以问控制器等。编译器如何找到grails工件神奇地拥有的方法/字段?我正试图在纯Java/Spring中设计类似的东西,并想知道如何实现类似的功能

编译器如何找到grails工件所使用的方法/字段 神奇地拥有

编译器并没有真正找到方法,至少不是所有查询机制都能找到。例如,动态查找程序不会在编译时解析。它们在运行时通过动态分派进行处理
where
查询是在编译时装配的,其中“how”有点复杂,但简而言之,我们有编译时AST转换,用于在域类上查找对静态
where
方法的调用,以及在遇到其中一个时,编译时的AST转换生成运行时执行查询所需的代码。像
get(id)
list()

我正试图在纯Java/Spring中设计类似的东西,并且会 我想知道我怎样才能完成这样的事情

我上面描述的方法都没有可以用Java实现的直接对应方法。所有这些技术都依赖于Groovy提供的特性

编辑

当前问题的标题是“Grails域类从何处获得查询方法?”因此我在域类的查询方法上下文中专门回答了这个问题。对于更一般的“编译器如何找到grails工件神奇地拥有的方法/字段?”,上面的注释仍然适用

编译器如何找到grails工件所使用的方法/字段 神奇地拥有

编译器并没有真正找到方法,至少不是所有查询机制都能找到。例如,动态查找程序不会在编译时解析。它们在运行时通过动态分派进行处理
where
查询是在编译时装配的,其中“how”有点复杂,但简而言之,我们有编译时AST转换,用于在域类上查找对静态
where
方法的调用,以及在遇到其中一个时,编译时的AST转换生成运行时执行查询所需的代码。像
get(id)
list()

我正试图在纯Java/Spring中设计类似的东西,并且会 我想知道我怎样才能完成这样的事情

我上面描述的方法都没有可以用Java实现的直接对应方法。所有这些技术都依赖于Groovy提供的特性

编辑


当前问题的标题是“Grails域类从何处获得查询方法?”因此我在域类的查询方法上下文中专门回答了这个问题。对于更一般的“编译器如何找到grails工件神奇地拥有的方法/字段?”,上面的注释仍然普遍适用。

这可以通过在Groovy中使用Traits(在较新版本的grails中)或元编程(较旧版本的grails)来完成。@Joshuamore您能用一个例子给出答案吗?这可以在Groovy中使用Traits(在更高版本的Grails中)或元编程(更高版本的Grails)来完成“-@Joshuamore即使在更新版本的Grails中,也不是所有的查询方法都装配了Traits。例如,
where
查询通过AST转换装配起来,AST转换应用于调用查询的站点。在所有版本的Grails中,动态查找程序都依赖于使用
methodMissing
@JeffScottBrown的运行时元编程,因此这听起来像是纯Java不可能实现的,如果它依赖于Groovy AST转换?这可以在Groovy中使用Traits(在更高版本的Grails中)或元编程(更高版本的Grails中)来完成。@Joshuamore你能用一个例子给出答案吗?这可以在Groovy中使用Traits(在更高版本的Grails中)或元编程(更高版本的Grails)来完成“-@Joshuamore即使在更新版本的Grails中,也不是所有的查询方法都装配了Traits。例如,
where
查询通过AST转换装配起来,AST转换应用于调用查询的站点。在所有版本的Grails中,动态查找程序都依赖于使用
methodMissing
@JeffScottBrown的运行时元编程,因此这听起来像是纯Java不可能实现的,如果它依赖于Groovy AST转换?