2017-02-17 24 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