2016-09-09 83 views
0

同样的问题可能会被问及控制器等。编译器如何找到神奇地具有grails工件的方法/字段?我正尝试在纯Java/Spring中设计类似的东西,并想知道我可以如何完成这样的事情。Grails域类从哪里获取它们的查询方法?

+1

这可以在Groovy中使用Traits(在更高版本的Grails中)或元编程(Grails的旧版本)来完成。 –

+0

@JoshuaMoore你能举一个例子回答吗?这将是甜蜜的。 – zero01alpha

+1

“这可以通过在Groovy中使用Traits(在Grails的更高版本中)或元编程(Grails的旧版本)来完成” - @JoshuaMoore即使在Grails的新版本中,也不是所有的查询方法都与特性搭配。例如,“where”查询使用在查询被调用的站点上应用的AST转换来装配。 –

回答

2

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

编译器没有真正找到方法,至少不是所有的查询机制。例如,动态查找器在编译时不解析。它们在运行时通过动态分派进行处理。 where查询在编译时被绑定,并且“how”有一点涉及,但总之,我们有编译时AST转换,查找对域类的静态where方法的调用,当遇到其中一个方法时,AST编译时转换生成在运行时执行查询所需的代码。像get(id)list()这样的方法是在编译时Grails添加到所有域类的特征中定义的。

我想在纯Java/Spring中设计类似的东西,并想 想知道我可以如何完成这样的事情。

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

HTH

编辑

问题的标题是目前“在哪里Grails领域类从他们的查询方法?”所以我专门在域类的查询方法的上下文中回答。对于更一般的“编译器如何查找grails artifacts神奇地具有的方法/字段?”,上面的注释仍然适用。