博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring的@Value获取不到值的问题
阅读量:5771 次
发布时间:2019-06-18

本文共 1108 字,大约阅读时间需要 3 分钟。

一、问题背景

这两天做东西的时候发现一个问题,在SpringMVC中使用@Value的时候,无法获取@Value对应的值。在网上查阅了各种资料之后,总结一下。

二、@Value注解的作用。

                 为了减小耦合度,通常,将一些固定的常量放在配置文件***.properties中。

               properties内容定义形式:名称=值

 

SAY_COUNT=10TITLE_COUNT=10MESSAGE_COUNT=10BACK_COUNT=10

 

               当需要这些常量的时候,通过加载properties文件,在需要的位置使用这些常量,当需要修改这些常量值的时候,只要在配置文件中修改就可以了。

               在没有使用spring之前,想使用配置文件当中的数据必须得自己手工写代码加载配置文件。但是在使用spring的时候,这种操作可以通过在spring中添加一个配置来完成。

 

              在需要使用的地方,通过使用@Value注解,就可以自动完成注入。

 

@Value("${INDEX_TITLE}")	private Integer INDEX_TITLE;

三、获取不到值的情况。  

      1)当SpringMVC与Spring整合使用的时候,在Controller中无法获取@Value对应的值。(刚开始我就是这种情况,,,,)

         产生原因: 只在applicationContext中添加了扫描,没有在SpringMVC对应的配置文件中扫描。

         applicationContext加载的是父容器,,父容器在项目启动的时候就被加载了。SpringMVC对应的配置文件加载的是子容器,子容器可以访问父容器的对象,但是不能访问加载的配置文件。所以,如果想在SpringMVC中使用加载的配置文件,需要在SpringMVC对应的配置文件中添加相应的配置即可。

        2)在service或者dao层无法获取@Value的数值。

          可能情况:有多个applicationContext.xml文件,里面有多个context:property-placeholder,在web容器启动的时候同时加载了这些配置文件,这时候只会有一个配置文件中的context:property-placeholder会被加载,其他的不会被加载。

 

          那么,当需要加载多个properties的时候,如何解决?可以用下面的方法

 

 

         这样,将所有需要加载的properties放在一个目录之下,通过*.properties就可以加载所有的properties文件。

 

ps:渣渣一枚,如有不对请指正。

   

 

转载于:https://www.cnblogs.com/GregZQ/p/8365277.html

你可能感兴趣的文章
14Exchange Server 2010跨站点部署-发送连接器
查看>>
交换机
查看>>
javaScript中数组对象(一)
查看>>
什么是混合app开发
查看>>
LinuxCon的中国首秀请了哪些开源大咖?
查看>>
Python开发简单爬虫(持续)
查看>>
nginx 安装sticky遇到的问题
查看>>
Nginx
查看>>
Wyn Enterprise 核心功能:系统集成
查看>>
Kafka集群搭建
查看>>
面试题之mysql
查看>>
云计算 简介
查看>>
工作流学习——Activiti流程变量五步曲
查看>>
vue开发框架搭建(详细版)
查看>>
函数计算性能福利篇(二) —— 业务冷启动优化
查看>>
分布式环境各种问题 与 CAP/BASE
查看>>
学习Python3 进程,这一篇就够了
查看>>
对Session.getAttribute(),Request.setAttribute()和ModelMap.addAttribute()用法的理解
查看>>
set uid/set gid/sticky bit、软链接、硬链接
查看>>
PublicCMS 网站漏洞 任意文件写入并可提权服务器权限
查看>>