2016-09-09 40 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神奇地具有的方法/字段?」,上面的註釋仍然適用。