一、使用
@Value("${name}")注解可以獲取自定義的properties文件中的name值
二、配置
如果只是在applicationcontext.xml中配置,那么在service中獲取,沒有任何問題,但是在controller中是獲取取到值的,如果想獲取到值,需要在spring-servlet.xml中再配置一遍
!-- 定義環境變量文件 --> <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配置,肯定是找不到的。