为什么Class.forName不能用于grails域类

时间:2012-10-05 16:02:25

标签: grails reflection groovy

我知道使用Class.forName加载grails域类不起作用,但我不确定为什么会这样。我猜测有些种类的魔法发生了,但是理解它是什么很好。

我最终使用

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

但我不确定为什么Class.forName('mypack.myclass')无法正常工作。

1 个答案:

答案 0 :(得分:8)

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

Class clazz = Class.forName('mypack.myclass', true, Thread.currentThread().contextClassLoader)
def newDomainObject = clazz.newInstance()