0

ドキュメントによると、Grails コントローラは、名前に「Controller」が追加され、.xml に保存された単純なクラスgrails-app/controllers/です。そのようなクラスの最も単純なものは次のとおりです。

package some.package

class FooController {
  def index = {}
}

Grails アプリケーションが実行されると、このコントローラーは や などのいくつかの標準メソッドを継承getParamsgetSessionます。添付のスクリーンショットから、これらが 経由で追加されていることがわかりますgroovy.lang.ExpandoMetaClass。私が見ていないのは、これがどのように起こるかです。コントローラーは、インターフェイスを実装したり、抽象化を拡張したりしません。これらの方法はどこから来たのですか?

コントローラ オブジェクト グラフ

4

3 に答える 3

5

Grails 2.0 から、コントローラーのアーティファクトに動的メソッドを追加するために、新しい方法論が採用されました。これらのプロパティがコントローラーにどのように追加されるかを確認するには、それらを段階的に参照してください。

  • grails のコントローラーは grails-core の一部ではなく、それ自体がgrails-plugin-controllersという名前の grails へのプラグインです。
  • プラグインであるため、対応する*GrailsPluginクラスがプラグインの動作を定義します。
  • ControllersApi (CommonWebApi を拡張) は、コントローラー アーティファクトに追加されるすべてのプロパティを保持します。(Grails 2.0 から導入)
  • ControllerGrailsPluginは ControllersApi をSpring Beanとして登録します。
  • ControllerApi を Bean として追加するだけではありません。
  • API (この場合は ControllerApi) を取得/考慮し、リフレクションを使用してアーティファクトに CachedMethods を追加することにより、対応する API でアーティファクト (コントローラー) を拡張/調整する MetaClassEnhancer の概念があります。これは、に存在するBaseApiProviderの役割です。 grails コア。
  • この魔法は Controller プラグイン クラスでも発生します。

現在、Grails 2.0 より前では、動的プロパティをコントローラーに追加するために別の方法が採用されていました。そのようにして、metaClass プロパティが実行時にコントローラに追加されましたが、効率が悪いことが判明しました。各動的プロパティは、現在使用されていない独自のクラス (つまり、GetParamsDynamicProperty、GetSessionDynamicProperty) によって表されていました。

したがって、これらの動的メソッドのオブジェクト ツリーを調べる必要があるのは、コントローラでCachedMethodsが使用できる場所です。それが役立つことを願っています。追加希望がありましたら追加していただけると幸いです。:-)

于 2013-09-18T15:37:59.807 に答える
1

おっしゃる通り、Grails の「コントローラー」は、基本クラスから継承するという意味では実際にはコントローラーではなく、grails-app/controllersディレクトリに配置されるという規則に従う単純な POGO にすぎません。アプリケーションがコンパイルされると、AST 変換によって 30 以上のメソッドが混合されます。

org.codehaus.groovy.grails.plugins.web.api.ControllersApi、だけでなく、 org.codehaus.groovy.grails.plugins.converters.api.ConvertersControllersApiから org.codehaus.groovy.grails.plugins.web.api.ControllersMimeTypesApi

上記は、Burt Beckwith によるProgramming Grailsから言い換えたものであり、Grails の詳細に興味がある場合は、これをお勧めします。

于 2013-09-18T15:47:52.080 に答える
0

Burt Beckwith の優れた本、Programming Grailsからの引用:

30 を超えるメソッドが、AST 変換を使用してコントローラー クラスに混在しています。大多数は org.codehaus.groovy.grails.plugins.web.api.ControllersApiクラスから追加されます

ControllersApi ソース

于 2013-09-18T15:13:51.787 に答える