如何导航Grails核心源代码以更好地理解框架



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

例如,我想看看控制器中的response方法是什么样子的,以及当index方法看起来像时,它如何向我的club/index gsp返回一个名为"clubInstanceList"的参数

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

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

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

动态运行时方法

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

例如,Grails有ControllersGrailsPlugin类,它为控制器类添加了数据绑定功能。

搜索方法

由于我在这个插件描述符中没有发现任何与respond方法相关的内容,所以这可能是通过编译完成的。您可以使用ctrlH,并进行Java搜索,在"搜索"框中标记method。在scope标记中,workspace和STS也将查找Grails类。

答案

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

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

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

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

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

相关内容

最新更新