通常在 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

所以我们不是唯一一个刮掉我们的头的人。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top