我有一个 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/