groovy bean出错

时间:2017-02-17 17:04:31

标签: spring groovy

我有这个.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,但它不起作用。

2 个答案:

答案 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