天天看點

在Spring項目中使用@Value注解引入配置檔案中的參數

如題所示,有時候我們的一些配置并不能在代碼中“寫死”,而是需要動态配置在配置檔案中。這樣可以使得以後需要修改該參數時隻需要修改配置檔案中的參數值即可,而不需要修改代碼。具體配置如下:

(1)在Spring的配置檔案中添加以下配置用于引入參數所在的檔案:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<code>&lt;</code><code>bean</code> <code>id</code><code>=</code><code>"configProperties"</code>

<code>    </code><code>class</code><code>=</code><code>"org.springframework.beans.factory.config.PropertiesFactoryBean"</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"locations"</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>list</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>value</code><code>&gt;classpath:jdbc.properties&lt;/</code><code>value</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>value</code><code>&gt;classpath:article.properties&lt;/</code><code>value</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>list</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>property</code><code>&gt;</code>

<code>&lt;/</code><code>bean</code><code>&gt;</code>

<code>&lt;</code><code>bean</code> <code>id</code><code>=</code><code>"propertyConfigurer"</code>

<code>    </code><code>class</code><code>=</code><code>"org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"properties"</code> <code>ref</code><code>=</code><code>"configProperties"</code> <code>/&gt;  </code>

注:如果想在Controller中也使用@Value注解引入配置檔案中的參數的話,那麼需要将上面的“propertyConfigurer”這個bean在SpringMVC的配置檔案中也重複複制一遍,也就是:

(2)article.properties檔案的具體内容如下:

<code>test.author=zifangsky</code>

(3)測試:

15

16

17

18

<code>package</code> <code>cn.zifangsky.controller;</code>

<code>import</code> <code>org.springframework.beans.factory.annotation.Value;</code>

<code>import</code> <code>org.springframework.stereotype.Controller;</code>

<code>import</code> <code>org.springframework.web.bind.annotation.RequestMapping;</code>

<code>@Controller</code>

<code>public</code> <code>class</code> <code>TestController {</code>

<code>    </code> 

<code>    </code><code>@Value</code><code>(</code><code>"#{configProperties['test.author']}"</code><code>)</code>

<code>    </code><code>private</code> <code>String author;</code>

<code>    </code><code>@RequestMapping</code><code>(</code><code>"/test.html"</code><code>)</code>

<code>    </code><code>public</code> <code>void</code> <code>test(){</code>

<code>        </code><code>System.out.println(</code><code>"---------------"</code><code>);</code>

<code>        </code><code>System.out.println(</code><code>"測試: "</code> <code>+ author);</code>

<code>    </code><code>}</code>

<code>}</code>

可以看出,這裡使用了@Value注解,其文法如下:

@Value(“#{configProperties[‘參數名’]}”)

當然,還有一種簡寫的文法是:

@Value(“${參數名}”)

也就是說上面加載參數那裡也可以這樣使用:

<code>@Value</code><code>(</code><code>"${test.author}"</code><code>)</code>

<code>private</code> <code>String author;</code>

(4)最後輸出如下:

<code>---------------</code>

<code>測試: zifangsky</code>

<code></code>

本文轉自 pangfc 51CTO部落格,原文連結:http://blog.51cto.com/983836259/1889581,如需轉載請自行聯系原作者