Grails 如何在圣杯的帷幕后面看?

Grails 如何在圣杯的帷幕后面看?,grails,Grails,我正在阅读一本介绍Grails的书,我看到了以下代码: if (session.user) { ... } session是一个扩展了HttpSession的GrailsHttpSession,两者都没有user属性。我想弄清楚设置/获取任意属性是如何工作的,所以我设置了一些断点,并在一段时间后发现HttpSession在ServletsGrailsPluginSupport中得到了增强 我的问题是,设置断点并单步执行代码是一种缓慢而粗暴的方法,可以发现Grails魔法是如何工作的。有没有一种

我正在阅读一本介绍Grails的书,我看到了以下代码:

if (session.user) { ... }
session
是一个扩展了
HttpSession
GrailsHttpSession
,两者都没有
user
属性。我想弄清楚设置/获取任意属性是如何工作的,所以我设置了一些断点,并在一段时间后发现
HttpSession
ServletsGrailsPluginSupport
中得到了增强

我的问题是,设置断点并单步执行代码是一种缓慢而粗暴的方法,可以发现Grails魔法是如何工作的。有没有一种更快、更有效的方法来发现Grails是如何以及在何处增强普通方法的?(例如,我仍然不知道在哪里实现了
DomainEntity.findAllByInsertFieldHere
,也不知道如何找到它。)

说清楚一点,我不是要求别人给我一条鱼,我是在问如何钓鱼。

一定要去看看。描述说:

深入研究Grails体系结构,并发现该应用程序 框架发挥了它的魔力。由Grails上的核心开发人员编写 团队,本实用指南将带您在幕后展示 其2.0功能集的内部工作


哎呀,这正是你要找的!:)

尽管阅读各种书籍有很多值得一提的地方,但事实上,它们中没有一本能够给你一个关于Grails的观点,而or将会这样做

花点时间浏览一下Grails和Spring的API,看看源代码是如何实现的


Groovy使用了大量的元编程,每个类中都有一个元类,您可以向该类添加功能或修改功能,甚至可以创建动态方法,例如,
findAllByInsertFieldHere
实际上并不存在,但是,如果一个方法以
findAllBy
开头,它将使用函数的其余部分作为参数(在本例中为
insertFieldHere
)来创建查询

选中此项:

使用源代码年轻绝地: