1

grailsドメインクラスのロードに使用しても機能しないことは知っていClass.forNameますが、その理由はわかりません。ある種のグライルマジックが起こっていると思いますが、それが何であるかを理解しておくといいでしょう。

私は使用することになった

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

しかし、なぜそれだけでClass.forName('mypack.myclass')はうまくいかないのかわかりません。

4

1 に答える 1

8

Grails はカスタム クラスローダーを使用するため、Grails が使用し、コンテキスト クラスローダーとして登録するクラスローダーで 3 引数のバリアントを使用する必要があります。

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