2017-02-17 25 views
0

我有这个.groovy作为文件错误的Groovy bean

@RestController 
class SimpleBeanApp{ 

    @Autowired 
    String text 

    @RequestMapping("/") 
    String index(){ 
     "You can do: ${text}!" 
    } 

    beans { 
     text String, "-Spring Boot with Groovy beans-" 
    } 

} 

当我运行它,我有

文件... beans.groovy:12:意外的标记:豆@线12条,列2.豆类

这是beans{,我曾尝试beans前添加注释@Bean但它不工作。

+2

豆子应该做什么?这不是有效的Groovy afaik –

回答

0

您正试图在控制器类的开头注入String text@Autowired注释。

春节搜索,在其依赖注入范围String型豆。没有编译的行应该提供缺少的bean。

我不熟悉的常规,但它必须是这个样子:

@Bean 
String text() { 
    return "-Spring Boot with Groovy beans-" 
} 

这就是你如何创建String类型和名称text的豆。它将通过弹簧依赖注入框架找到,并与控制器顶部的@Autowired字段相关联。

0

什么法力sugests是“Java的构建。它会工作,但不是常规的。确实,groovy应该让你以更“时髦”的方式创造豆子;通过提供一个豆关闭。

我正在寻找解决同样的问题,我自己今天。 原来我必须自己找出...所以在这里提供我的2美分。

那豆'的定义实际上是属于GroovyBeanDefinitionReader

这样的方法,你需要创建一个这样的类并调用它的“豆”方法提供它关闭将豆的定义,比如上例中在javadoc。 (我爱时髦,但时不时我觉得我需要了解的代码在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内把文件豆配置:

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

beans { 
    ... 
} 

注意DemoConfig.groovy应设在: /src/main/resources/DemoConfig.groovy