我有一个已编译的 grails 项目,并且从一个单独的 groovy 项目中,我反射性地加载了一个域类,如下所示
Class clazz = Class.forName('mypack.myclass', true, Thread.currentThread().contextClassLoader)
def newDomainObject = clazz.newInstance()
当从 grails 外部运行时(在我单独的 groovy 项目中),该对象不会被识别为 GroovyObject。
println newDomainObject instanceof GroovyObject // false
因为我是从 grails 外部运行的,所以我认为 groovy 会像对待任何其他类一样对待域类(并且通过查看类文件,它确实实现了 GroovyObject)。
我最好的猜测是它与 grails 如何编译域对象有关,但我不确定这里发生了什么。
请注意,这与为什么 Class.forName 不能在 grails 域类上工作有关,但不一样。