将Spring Bean注入Groovy Script

时间:2014-02-21 12:44:28

标签: spring groovy

我见过很多关于Groovy对象作为Spring bean的例子,但反之亦然。我在这样的Java EE应用程序中使用Groovy:

GroovyCodeSource groovyCodeSource = new GroovyCodeSource(urlResource);
Class groovyClass = loader.parseClass(groovyCodeSource, false);
return (GroovyObject) groovyClass.newInstance();

通过这种方式,使用带有@Configurable注释的Groovy编写的类正在注入Spring bean。现在没关系。

如何使用GroovyScriptEngine获得相同的效果?我不想定义一个类,我希望它像普通脚本一样工作。 Spring / Groovy能够做到这一点吗?

我看过有关此事的帖子,但我不确定它是否回答了我的问题:

HERE

1 个答案:

答案 0 :(得分:0)

你的意思是你想要在脚本中添加属性,并注入这些属性吗?你会提供吸气剂和二传手吗?这对我来说没什么意义。有意义的是,将mainContext添加到脚本的绑定中,或者将选定的bean添加到绑定中。

然后可以直接在脚本中访问这些bean(或上下文),就像它被注入一样。

def ctx = grailsApplication.mainContext
def binding = new Binding([:])
Map variables = [
        'aService',
        'anotherService'
].inject([config:grailsApplication.config, mainContext:ctx]) { m, beanName ->
    def bean = ctx.getBean(beanName)
    m[beanName] = bean
    m
}
binding.variables << variables

def compiler = new CompilerConfiguration()
compiler.setScriptBaseClass(baseScriptClassName)
def shell = new GroovyShell(new GroovyClassLoader(), binding, compiler)
script=shell.parse(scriptStr)
script.binding=binding


script.init()
script.run()