コントローラについても同様の質問が出る可能性があります。コンパイラはgrailsの魔法のようなメソッドやフィールドをどのように見つけますか?私は純粋なJava/Springで何か類似のものを設計しようとしており、このようなことをどのように達成できるか知りたいと思っています。Grailsドメインクラスはどこからクエリメソッドを取得しますか?
0
A
答えて
2
コンパイラは、アーティファクトをgrailsするメソッド/フィールドをどのように見つけますか? は魔法のように持っていますか?
コンパイラは、少なくともすべてのクエリメカニズムではなく、実際にはメソッドを検出しません。たとえば、動的なファインダはコンパイル時に解決されません。これらは実行時に動的ディスパッチで処理されます。 where
クエリはコンパイル時に組み立てられ、 "how"は少し複雑ですが、要するに、ドメインクラスの静的where
メソッドへの呼び出しを探すコンパイル時AST変換があり、そのうちの1つが発生すると、ASTコンパイル時に変換すると、実行時にクエリを実行するために必要なコードが生成されます。 get(id)
やlist()
などのメソッドは、コンパイル時にGrailsがすべてのドメインクラスに追加する特性で定義されています。
私は純粋なJava/Springで同様のものを設計しようとしていますが、 はこのようなことをどのように達成できるか知りたいです。
上記で説明したアプローチのいずれも、Javaで実装できる直接的な対応はありません。これらのテクニックはすべて、Groovyが提供する機能に依存しています。
HTH
EDIT
質問のタイトルは、現在、 "どこGrailsのドメインクラスから自分のクエリメソッドを得るのですか?" されますそこで、私は具体的にドメインクラスのクエリメソッドのコンテキストで答えました。より一般的な "コンパイラは、アーティファクトが魔法のようにあるgrailsのメソッドやフィールドをどのように見つけますか?"
関連する問題
- 1. Grailsスキャフォールディングテンプレート - ドメインクラスからプロパティを取得する
- 2. Grailsの - 私は、ドメインクラス作成したドメインクラス
- 3. Grailsでどのようにドメインクラスを変更しますか?
- 4. GroovyShellスクリプトからGrailsドメインクラスにアクセス
- 5. データベースからのGrailsドメインクラスの作成
- 6. Grailsのラクダルートからドメインクラスまたは豆にアクセスする
- 7. はどのようなドメインクラスを考えるとGrailsの3ドメインクラス
- 8. grailsのドメインクラス
- 9. Grailsドメインクラス。ランダムフィールド
- 10. Grailsドメインクラスのインタフェースタイプオブジェクト
- 11. GRAILSのsrc/javaからドメインクラスにアクセスするには?
- 12. Grailsユニットテストで抽象ドメインクラスのインスタンスを取得するにはどうすればよいですか?
- 13. Grails/groovyドメインクラスのTimeDurationのHibernateタイプを修正しますか?
- 14. Grailsドメインクラスにフィールドを追加しますか?
- 15. のGrails/Groovyは:GORMドメインクラスで
- 16. Grailsのは、非永続ドメインクラス
- 17. クラス名からgrailsドメインクラスを作成する
- 18. Grailsのドメインクラスのイベント
- 19. 時間フィールドgrailsドメインクラス
- 20. Grails 3ドメインクラス構成
- 21. ASP.NETはどこからカルチャ設定を取得しますか?
- 22. DropDownListForはどこからモデルを取得しますか?
- 23. pymssqlはどこからエラーコードを取得しますか?
- 24. NetServerEnumはどこからマシンのリストを取得しますか?
- 25. xmlHttp.responseTextはどこからテキストを取得しますか?
- 26. (char)intはどこからシンボルを取得しますか?
- 27. actionscript 3.0はどこからパラメータを取得しますか?
- 28. 電化はどこからノードを取得しますか?
- 29. ":: value"はどこから値を取得しますか?
- 30. ConfigurationManagerはどこからデータを取得しますか?
これは、GroovyのTraits(Grailsのそれ以降のバージョン)またはMetaプログラミング(古いバージョンのGrails)を使用して行われます。 –
@JoshuaMoore例を挙げて回答を投稿できますか?それは甘いでしょう。 – zero01alpha
"これはGroovyのTraits(Grailsのそれ以降のバージョン)やMetaプログラミング(古いバージョンのGrails)を使って行われます。" - @JoshuaMoore新しいバージョンのGrailsでも、すべてのクエリメソッドが特質を備えているわけではありません。たとえば、 'where'クエリは、クエリが呼び出されるサイトで適用されるAST変換でリグアップされます。 –