1

私は grails (2.2) を見ていますが、それはすべて美しく、魔法のようにさえ機能します。私はgrails create-controller、render()、redirect()、params、request など、多くのメソッドとプロパティを使用できる、箱から出して作成された Controller クラスを見ています。これはどこに配線されていますか?コード/プロジェクト/フレームワークのどこで render() がメソッドとして利用可能になっていることがわかりますか? そして、それはどのように実装されていますか?Java 開発者として、私は継承とコード インジェクションとリフレクションに慣れています。また、javascript プロトタイプでは、いくつかのブラック マジックを実行できます。しかし、XXController.groovy は単なるスタンドアロン オブジェクトです。名前 (XXController) または場所 (grails-app/controllers?) ですか、それとも IDE が検出できるインジェクションが発生していますか?

4

2 に答える 2

2

Grails の素晴らしい世界へようこそ。ここに役立つリンクがいくつかあります。

  • Web レイヤー ドキュメントのコントローラーのセクション。
  • そしてrenderメソッドのドキュメント。コントローラで利用可能なその他のメソッドについては、右側の「クイック リファレンス」列を確認してください。

その魔法がどのように行われるのか疑問に思っている場合は、Grails はオープン ソース プロジェクトなので、いつものように Github にアクセスしてください (警告、これはかなり大きなプロジェクトです)。

Grails は、メタ プログラミングを強力にサポートする動的言語である Groovy の上で動作します。これは基本的に、Grails のすべての魔法のトリックです。

最後に、Grails は CoC (Convection over configuration) に基づくフレームワークであるため、コントローラーはディレクトリ "grails-app/controllers" の下にあり、接尾辞 "Controller" を持つ任意のクラスになります。(コントローラーのフォルダーには「commandObjects」もある場合があります)。

よく知られているアイデアとの統合も非常に強力です。ぜひチェックしてください。

編集 レンダリング メソッドがどのように動作するかについては、こちらの github を参照してください。そして、Controllers metaClass パッケージでより多くの inyected もの

于 2013-01-04T17:18:04.800 に答える
1

Grails 2.0以降では、AST変換を使用して実装されています。以前は、GroovyMetaClassにメソッドを追加することで実装されていました。新しいアプローチの利点は、物事が少し速くなり、使用するメモリが少なくなることです。

GORMドメインクラスメソッドもこのアプローチを使用するようになり(メタクラスに動的に追加する必要があるfindByFooAndBarなどの動的メソッドを除く)、ASTがメソッドをバイトコードに追加するため、Javaから呼び出すことができるという利点があります。ただし、Webリクエストの結果としてGrails自体からのみ呼び出されるため、これはコントローラーには役立ちません。

厄介な詳細については、ControllersApiがメソッドの場所であり、 ControllerTransformerとControllersGrailsPlugindoWithDynamicMethodsのクロージャー内のコードの組み合わせによって各コントローラークラスに混合されます。

于 2013-01-04T17:54:57.313 に答える