2016-09-09 8 views
0

コントローラについても同様の質問が出る可能性があります。コンパイラはgrailsの魔法のようなメソッドやフィールドをどのように見つけますか?私は純粋なJava/Springで何か類似のものを設計しようとしており、このようなことをどのように達成できるか知りたいと思っています。Grailsドメインクラスはどこからクエリメソッドを取得しますか?

+1

これは、GroovyのTraits(Grailsのそれ以降のバージョン)またはMetaプログラミング(古いバージョンのGrails)を使用して行われます。 –

+0

@JoshuaMoore例を挙げて回答を投稿できますか?それは甘いでしょう。 – zero01alpha

+1

"これはGroovyのTraits(Grailsのそれ以降のバージョン)やMetaプログラミング(古いバージョンのGrails)を使って行われます。" - @JoshuaMoore新しいバージョンのGrailsでも、すべてのクエリメソッドが特質を備えているわけではありません。たとえば、 'where'クエリは、クエリが呼び出されるサイトで適用されるAST変換でリグアップされます。 –

答えて

2

コンパイラは、アーティファクトをgrailsするメソッド/フィールドをどのように見つけますか? は魔法のように持っていますか?

コンパイラは、少なくともすべてのクエリメカニズムではなく、実際にはメソッドを検出しません。たとえば、動的なファインダはコンパイル時に解決されません。これらは実行時に動的ディスパッチで処理されます。 whereクエリはコンパイル時に組み立てられ、 "how"は少し複雑ですが、要するに、ドメインクラスの静的whereメソッドへの呼び出しを探すコンパイル時AST変換があり、そのうちの1つが発生すると、ASTコンパイル時に変換すると、実行時にクエリを実行するために必要なコードが生成されます。 get(id)list()などのメソッドは、コンパイル時にGrailsがすべてのドメインクラスに追加する特性で定義されています。

私は純粋なJava/Springで同様のものを設計しようとしていますが、 はこのようなことをどのように達成できるか知りたいです。

上記で説明したアプローチのいずれも、Javaで実装できる直接的な対応はありません。これらのテクニックはすべて、Groovyが提供する機能に依存しています。

HTH

EDIT

質問のタイトルは、現在、 "どこGrailsのドメインクラスから自分のクエリメソッドを得るのですか?" されますそこで、私は具体的にドメインクラスのクエリメソッドのコンテキストで答えました。より一般的な "コンパイラは、アーティファクトが魔法のようにあるgrailsのメソッドやフィールドをどのように見つけますか?"

関連する問題