在运行时创建的外部groovy类中注入spring服务

时间:2014-02-04 18:30:52

标签: java spring groovy groovyshell groovyclassloader

我有一个Spring驱动的应用程序,并希望集成groovy。具体来说,我有一个抽象的java类,其中包含一组抽象方法定义和一个使用自动装配的存储库。

这个类必须由几个最终的groovy外部类(每个客户端一个)实现。

此时,我用这种方式调用java中的Groovy类:

final Class parsedClass = groovyClassLoader.parseClass(groovyFile);
final GroovyObject groovyObject = (GroovyObject) parsedClass.newInstance();
final Object response = groovyObject.invokeMethod(methodName, methodParameters);

问题是我需要在每个Groovy外部类中自动装入存储库变量,但目前是null。

当我在运行时创建它时,如何通知Groovy类获取隐藏的存储库变量?

谢谢!

修改

Y使用groovyObjectObject中的setProperty方法解决了这个问题:

groovyObject.setProperty("myRepository", myRepositoryImpl);

2 个答案:

答案 0 :(得分:1)

此处的实例不是由spring创建的,因此我不认为spring可以在groovyObject中自动设置存储库实例。

但是,如果您可以autowire将存储库导入到生成groovyObject的类中,那么您可以在newInstance调用中手动注入存储库。

parsedClass.newInstance(repository:your_autowired_repo_ref)

答案 1 :(得分:0)

我已经使用groovyObjectObject中的setProperty方法解决了这个问题:

groovyObject.setProperty("myRepository", myRepositoryImpl);