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

Jef*_*rey 1 reflection grails groovy

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

我最终使用了

GrailsDomainClass dc = grailsApplication.getDomainClass('mypack.myclass' )
def newDomainObject = dc.clazz.newInstance()
Run Code Online (Sandbox Code Playgroud)

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

Bur*_*ith 8

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

Class clazz = Class.forName('mypack.myclass', true, Thread.currentThread().contextClassLoader)
def newDomainObject = clazz.newInstance()
Run Code Online (Sandbox Code Playgroud)