2014-02-21 135 views
0

我見過很多關於Groovy對象的例子,而不是反過來。我使用Groovy在這樣的Java EE應用程序:將Groovy對象注入到Groovy腳本

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

這樣,寫在Groovy中使用@Configurable註解類被注入的Spring bean。現在可以。

如何通過使用GroovyScriptEngine獲得相同的結果?我不想定義一個類,我希望它像一個純腳本一樣工作。 Spring/Groovy能夠做到這一點嗎?

我已經看到了這個帖子,但我不知道是否回答我的問題或不:

HERE

回答

0

你的意思是你想屬性添加到腳本,並注入那些?你會提供getter和setter嗎?這對我來說沒有多大意義。有意義的是,將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()