@Value在Controller中取值

Posted no-npe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@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配置,肯定是找不到的。

以上是关于@Value在Controller中取值的主要内容,如果未能解决你的问题,请参考以下文章

Map集合中,关于取值和遍历的相关操作

JMeter:逻辑控制器_模块控制器(Module Controller)

几个有用的JavaScript/jQuery代码片段(转)

ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)(代码片段

jQuery对表单元素的取值和赋值操作代码(转)

@Value取值为NULL的解决方案