【发布时间】:2013-06-16 12:05:11
【问题描述】:
圣杯FAQ 这么说:
问:如何从 src/groovy 中的源访问域类?
有时,您正在开发一些实用程序类,它们存在于 src/groovy 中,并且您打算 > 从服务和其他工件中使用它们。但是,由于这些类是由 Grails 预编译的,因此无法实例化它们并编写诸如 Book.findByTitle("Groovy in >Action") 之类的东西。但幸运的是,有一种解决方法,因为可以这样做:
导入 org.codehaus.groovy.grails.commons.ApplicationHolder
//…
def book = ApplicationHolder.application.getClassForName("library.Book").findByTitle("Groovy in Action")
应用程序必须在动态 Gorm 方法正常运行之前完成引导。
但是,我似乎可以直接导入域对象并在我的 src/groovy 类中使用 GORM 方法而没有任何问题,例如:
Book.findByTitle("Groovy in Action")
由于 ApplicationHolder 已被弃用,此建议肯定已过时,但仍有任何理由避免直接从 src/groovy 使用域类?
【问题讨论】:
-
旧版本的 grails 通过对人工制品 (grails-app) 和非人工制品 (src/groovy) 类使用不同的类加载器,在开发模式下实现了修改后的人工制品的自动重新加载。较新的 grails 版本使用基于代理的重新加载方法,而这一切都在一个类加载器中。
标签: grails grails-orm