1

我知道使用Class.forName加载 grails 域类不起作用,但我不确定为什么会这样。我猜有某种 grails 魔法正在发生,但很高兴了解它是什么。

我最终使用

GrailsDomainClass dc = grailsApplication.getDomainClass('mypack.myclass' )
def newDomainObject = dc.clazz.newInstance()

但我不确定为什么只是做Class.forName('mypack.myclass')不起作用。

4

1 回答 1

8

Grails 使用自定义类加载器,因此您需要将 3-arg 变体与 Grails 使用并注册为上下文类加载器的类加载器一起使用:

Class clazz = Class.forName('mypack.myclass', true, Thread.currentThread().contextClassLoader)
def newDomainObject = clazz.newInstance()
于 2012-10-05T16:16:59.047 回答