java – 从groovy调用Spring组件

我有一个基于Spring的java应用程序,其中包含一些有用的组件.作为系统的一部分,我有一个groovy脚本,来处理一些报告.我想从groovy脚本中调用spring组件.
当我用Java编写时,我需要在@Component中使用@Autowired注释,即

@Component
class Reporter{
@Autowired
SearchService searchService;

void report(){
 searchService.search(...);
 ...
}
}

我如何从groovy做同样的事情?
首先,我如何为整个脚本定义@Component?
以下代码:

@Component class Holder{
    @Autowired
    SearchService searchService;

    def run(){
        searchService.search("test");
    }
}

new Holder().run()

在searchService上使用NPE失败.
如果重要的话,我正在使用从Java实例化的GroovyClassloader运行groovyscripts.
非常感谢提前!

解决方法:

如果您正在使用@Component,则应将Spring上下文创建为:

def ctx = new GenericApplicationContext()
new ClassPathBeanDefinitionScanner(ctx).scan('') // scan root package for components
ctx.refresh()

或者在XML中:

<context:component-scan base-package="org.example"/>

如果上面创建了上下文,您的代码应该有效.这是Groovy Codehaus的一个例子

import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component

@Component class CalcImpl3 {
    @Autowired private AdderImpl adder
    def doAdd(x, y) { adder.add(x, y) }
}

相关文章

背景:    8月29日,凌晨4点左右,某服务告警,其中一个...
https://support.smartbear.comeadyapi/docs/soapui/steps/g...
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能...
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,...
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部...
在运行groovy的junit方法时,报了这个错误:java.lang.Excep...