下一段Groovy代码适用于@Will P的Grails(感谢your answer):
String string2code = "variable = 'hello'; return variable.toUpperCase()";
def result = new GroovyShell().evaluate string2code
assert result == "HELLO"
不幸的是,如果我们引入Grails的魔法查询,它就会失败:
String string2code = "return DomainClassExample.findByName('hello')";
// String string2code = "DomainClassExample.where { name == 'hello' }"
def queryResult = new GroovyShell().evaluate string2code
这是错误:
Class
groovy.lang.MissingPropertyException
Message
No such property: DomainClassExample for class: Script1
有可能吗?怎么样?
答案 0 :(得分:2)
GroovyShell
使用的类加载器不知道在运行时加载的Grails工件类。但是如果您将Grails类加载器作为其父类加载器传递,则类将解析。 Grails将其类加载器注册为线程的上下文类加载器,因此这是一种快速执行所需操作的方法:
def queryResult = new GroovyShell(Thread.currentThread().contextClassLoader).evaluate string2code