@Value在Controller中取值


一、使用

  @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配置,肯定是找不到的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM