如何浏览 Grails 核心源代码以更好地理解框架?
-
21-12-2019 - |
题
通常在 Spring Source Tool Suite IDE 或 Eclipse Maven 项目中,如果我想查看框架/库方法在幕后正在做什么,我可以按住 ctrl + 单击方法名称,它将带我到源代码。据我了解,许多 Grails 方法是在运行时动态添加的,因此 IDE 并不总是能够知道如何访问它们。否则,我可以在 Google、Github 或 API 文档上按包搜索该类。使用 Grails 核心源代码来更好地理解框架的最佳方法是什么?
例如,我想查看控制器中的响应方法是什么样子,以及当索引方法如下所示时,它如何将名为“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 核心源代码,但不知道控制器上此响应方法的包结构。
解决方案
这可能不是一个简单的搜索,因为一些代码是在编译期间生成的,或者功能可以在运行时添加到您的类中。这是使用动态语言时所付出的代价。
动态运行时方法
当我需要找到一些不太明显的功能时,我首先尝试找到负责该功能的内部插件。在STS中我做 ctrl
shift
T
并搜索 *GrailsPlugin*
. 。您可以检查运行时更改 doWithDynamicMethods
关闭插件。
例如,Grails 有 ControllersGrailsPlugin
为控制器类添加数据绑定功能的类。
搜索方法
因为我没有找到任何相关的内容 respond
这个插件描述符中的方法,这可能是通过编译完成的。你可以使用 ctrl
H
, ,并进行 Java 搜索,标记 method
在“搜索”框中。在里面 scope
标记 workspace
STS 也会寻找 Grails 类。
答案
所以你的问题的答案是 ControllersRestApi
类,我使用“搜索方法”的方法找到了它。
其他提示
我有一个相同的问题,发现sergio的答案非常有用,但这是另一种方法:加载调试器和步骤通过F5。现在,除非您启用步进过滤器(参见GGTS / STS / Eclipse帮助),否则这可能会耗尽。特别是,除了预选的软件包之外,我建议筛选出来的生成读出。这消除了很多反射和动态部分 - 至少在这样的情况下 - 你不关心。
我还会添加我的任务发现这个问题来改进响应方法文档:
https://jira.grails.org/browse/grails-10721
所以我们不是唯一一个刮掉我们的头的人。