java - 在运行时创建的外部groovy类中注入(inject)spring服务

标签 java spring groovy groovyshell groovyclassloader

我有一个 Spring 支持的应用程序,想要集成 Groovy。具体来说,我有一个抽象 java 类,其中包含一组抽象方法定义和一个使用 Autowiring 注入(inject)的存储库。

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

此时,我在java中调用Groovy类是这样的:

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

问题是我需要在每个 Groovy 外部类中 Autowiring 存储库变量,但当前为 null。

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

谢谢!

编辑

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

groovyObject.setProperty("myRepository", myRepositoryImpl);

最佳答案

这里的实例不是由 spring 创建的,因此我认为 spring 无法自动在您拥有的 groovyObject 中设置存储库的实例。

但是,如果您可以将存储库 Autowiring 到生成groovyObject的类中,那么您可以在newInstance中手动注入(inject)存储库打电话。

parsedClass.newInstance(repository:your_autowired_repo_ref)

关于java - 在运行时创建的外部groovy类中注入(inject)spring服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21560503/

相关文章:

mysql - 没有数据库的Spring Boot

xml - Groovy xml 是否可以使用 xsd 验证进行解析?

java - Headless Chrome 的性能问题

java - Blackberry JDE 安装程序找不到 java

java - Spring AOP : Advice not called in abstract class

java - 在类路径上找不到资源目录

grails - 如何在Grails中随时创建和保存数据?

servlets - 无法下载小文件,但可以下载大文件

Java EE - 如何使用自定义注释在方法上注入(inject)方法参数

java - 如何在 Selenium 中按下2个键