【问题标题】:How to navigate Grails core source code to better understand framework?如何浏览 Grails 核心源代码以更好地理解框架?
【发布时间】:2014-01-29 16:03:46
【问题描述】:

通常在 Spring Source Tool Suite IDE 或 Eclipse Maven 项目中,如果我想查看框架/库方法在幕后做什么,我可以 ctrl + 单击方法名称,它将带我到源代码.我知道很多 Grails 方法是在运行时动态添加的,因此 IDE 并不总是可能知道如何获取它们。否则,我可以在 Google、Github 或 API 文档上按包搜索类。使用 Grails 核心源代码更好地理解框架的最佳方法是什么?

例如,我想看看控制器中的响应方法是什么样的,以及当 index 方法看起来像这样时,它如何将名为“clubInstanceList”的参数返回给我的俱乐部/索引 gsp:

def index(Integer max) {
    params.max = Math.min(max ?: 10, 100)
    respond clubService.list(params), model:[clubInstanceCount: clubService.count()]
}

ctrl + click 在 IDE 中不起作用,因为此方法是在运行时添加的。我在 github 上搜索了 Grails 核心源,但不知道控制器上此响应方法的包结构。

【问题讨论】:

  • 我在下面回答,但我想补充一点,我刚开始使用 IntelliJ,打开 Grails 控制器方法(如响应和渲染)的声明没有问题。它展示了对代码的更深入的理解,包括所有引用。

标签: grails grails-controller grails-2.3


【解决方案1】:

这可能不是一个简单的搜索,因为一些代码是在编译期间生成的,或者可以在运行时将特性添加到您的类中。这是您在使用动态语言时付出的代价。

动态运行时方法

当我需要找到一些不太明显的功能时,我会首先尝试找到负责该功能的内部插件。在 STS 中,我执行 ctrl shift T 并搜索 *GrailsPlugin*。您可以在插件的 doWithDynamicMethods 闭包中检查运行时更改。

例如,Grails 具有 ControllersGrailsPlugin 类,可为您的控制器类添加数据绑定功能。

搜索方法

由于我在这个插件描述符中没有找到任何与respond 方法相关的东西,这可能是编译产生的。您可以使用ctrlH,并进行Java 搜索,在“搜索”框中标记method。在scope 标记workspace 中,STS 也会查找 Grails 类。

答案

所以你的问题的答案是ControllersRestApi 类,我使用“搜索方法”方法找到了它。

【讨论】:

  • 欢迎 :-) 我希望更多的人成为像你一样的狂热者并开车进入源头!
  • 我也是!我总是想知道事情是如何运作的。我发现 Burt Beckwith 的《Programming Grails》一书很有帮助。
【解决方案2】:

我有同样的问题,发现 Sergio 的回答很有帮助,但这里有另一种方法:加载调试器并使用 F5 逐步完成。现在,除非您启用步骤过滤器,否则这可能会让人筋疲力尽(请参阅 GGTS/STS/Eclipse 帮助)。特别是,我建议过滤掉org.springsource.loaded.*,除了预先选择的包。这消除了很多反射和动态部分 - 至少在这种情况下 - 你不关心。

我还要补充一点,我的任务发现了这个问题以改进响应方法文档:

https://jira.grails.org/browse/GRAILS-10721

因此,我们并不是唯一对此感到头疼的人。

【讨论】:

    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多