我知道使用Class.forName
加载grails域类不起作用,但我不确定为什么会这样。我猜测有些种类的魔法发生了,但是理解它是什么很好。
我最终使用
GrailsDomainClass dc = grailsApplication.getDomainClass('mypack.myclass' )
def newDomainObject = dc.clazz.newInstance()
但我不确定为什么Class.forName('mypack.myclass')
无法正常工作。
答案 0 :(得分:8)
Grails使用自定义类加载器,因此您需要将3-arg变体与Grails使用的类加载器一起使用并注册为上下文类加载器:
Class clazz = Class.forName('mypack.myclass', true, Thread.currentThread().contextClassLoader)
def newDomainObject = clazz.newInstance()