2011-04-13 191 views
27

我有一個常用的自動裝載屬性值的groovy類。使用@Value使用Groovy進行Spring註釋

如:

public @Value("${valueA}") String valueA; 

在我機應用方面加入了性能佔位符的

<context:property-placeholder location="classpath:spring/app.properties" /> 

的app.properties是否有「值a」設置,因此在理論上這應該值在運行時在我的類中填充字符串valueA。

如果我使用java類,但是如果我使用groovy類,則此設置完美工作。

我得到一個編譯錯誤:

Error: expected '$valueA' to be an inline constant of type java.lang.String in @org.springframework.beans.factory.annotation.Value
Error: Attribute 'value' should have type 'java.lang.String'; but found type 'java.lang.Object' in @org.springframework.beans.factory.annotation.Value

我只是想知道,如果以上語法使用Groovy類時是正確的,如果沒有什麼是在運行時自動裝配的@Value參數的正確語法。

+0

感謝您提出這個問題。這讓我有點瘋狂,但下面的答案可以做到。 – 2014-06-08 18:08:31

回答

47

使用單引號,即。

public @Value('${valueA}') String valueA 
+0

這是因爲用雙引號你得到一個GString而不是一個字符串,並且替換是在錯誤的時間完成的? – 2011-04-14 00:33:58

+0

是的,我相信。 – sourcedelica 2011-04-15 10:53:13

+0

謝謝,這在我的Groovy項目中影響了我。我猜想這不會發生在Java中,因爲沒有GString類型。 – Sion 2015-11-25 17:06:43

23

因爲使用$導致Groovy來解釋註釋參數作爲一個GString的,你會得到一個編譯錯誤。您可以轉義\ $或使用單引號。

+0

這應該被標記爲接受的答案 – 2016-05-29 20:04:38

相關問題