我有这个.groovy文件
@RestController
class SimpleBeanApp{
@Autowired
String text
@RequestMapping("/")
String index(){
"You can do: ${text}!"
}
beans {
text String, "-Spring Boot with Groovy beans-"
}
}
当我运行它时,我有
file ... beans.groovy:12:意外的令牌:beans @ line 12,column 2. beans
这是beans{
,我尝试在@Bean
之前添加注释beans
,但它不起作用。
答案 0 :(得分:0)
您正尝试在控制器类的开头注入String text
@Autowired
注释。
Spring在其依赖项注入范围中搜索类型为String
的bean。没有编译的行应该提供缺少的bean。
我不熟悉groovy,但它必须看起来像这样:
@Bean
String text() {
return "-Spring Boot with Groovy beans-"
}
如何创建类型为String
且名称为text
的bean。它将通过spring依赖注入框架找到,并链接到控制器顶部的@Autowired
字段。
答案 1 :(得分:0)
mana sugest是'Java'构造。它会工作,但不是groovy-ish。 确实,groovy应该允许你以更“常规”的方式创造豆类;通过提供豆类封闭。
我今天正在寻找解决同样的问题。 原来我必须自己找出......所以在这里提供我的2美分。
'beans'定义实际上是属于GroovyBeanDefinitionReader
的方法因此,您需要创建一个这样的类并调用其'beans'方法,为bean定义一个闭包,就像在javadoc中的示例一样。 (我喜欢groovy,但有时候我觉得我需要理解代码在C程序员时代意味着什么才能理解我真正在做什么......必须要老化...)
请注意,您需要掌握应用程序上下文。 我找到的一种方法(可能有更好的方法)是:
class SimpleBeanApp implements ApplicationContextAware {
...
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
def beanConfig = new GroovyBeanDefinitionReader(applicationContext)
beanConfig.beans {
text String, "-Spring Boot with Groovy beans-"
}
}
}
或者,您也可以将bean配置放在单独的groovy脚本中,以便在配置spring应用程序时加载。像:
static void main(String[] args) {
SpringApplication.run ([DemoApplication,new ClassPathResource('/DemoConfig.groovy')] as Object[], args)
}
在一个DemoConfig.groovy文件中放入bean配置:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
beans {
...
}
请注意,DemoConfig.groovy应位于: /src/main/resources/DemoConfig.groovy