1. 程式人生 > >@Value在Controller中取值

@Value在Controller中取值

一、使用

  @Value("${name}")註解可以獲取自定義的properties檔案中的name值

二、配置

  如果只是在applicationcontext.xml中配置,那麼在service中獲取,沒有任何問題,但是在controller中是獲取取到值的,如果想獲取到值,需要在spring-servlet.xml中再配置一遍

1

2

3

4

5

6

7

8

9

10

!-- 定義環境變數檔案 -->

<bean id="propertyHolder" class

="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>

<property name="ignoreResourceNotFound" value="true"/>

<property name="locations">

<list>

<value>classpath*:/template.properties</value>

</list>

</property>

</bean>

三、原因

  applicationcontext.xml 中定義的上下文稱根上下文,即WebApplicationContext,這是一個介面類,確切的說,其實際的實現類是XmlWebApplicationContext。這個就是spring的IoC容器,其對應的Bean定義的配置由web.xml中的context-param標籤指定。

  contextLoaderListener監聽器初始化完畢後,開始初始化web.xml中配置的Servlet,這個servlet可以配置多個,以最常見的DispatcherServlet為例,這個servlet實際上是一個標準的前端控制器,用以轉發、匹配、處理每個servlet請求。DispatcherServlet上下文在初始化的時候會建立自己的IoC上下文,用以持有springmvc相關的bean,每個servlet就持有自己的上下文,即擁有自己獨立的bean空間,同時各個servlet共享根上下文中定義的bean,可以通過id直接引用applicationcontext.xml 中定義的bean。

  controller的定義在springmvc-servlet.xml定義的上下文中,所以在Controller中使用@Value來獲取properties中的name值時,只會在servlet的上下文中查詢,如果不在springmvc-servlet.xml配置,肯定是找不到的。

白首為功名。 舊山松竹老,阻歸程。 將欲心事付瑤箏。 知音少,絃斷有誰聽? 紙上得來終覺淺,絕知此事要躬行。