spring注解@Value取不到值

今天在一个项目中发现一个情况,在Service中取不到 name值,直接输出了 {name}值,直接输出了{name}字符串,找了好久,最后在一篇文章中找到解决方案.


解决这个问题的一篇文章(转)

@Value取不到值引出的spring的2种配置文件applicationContext.xml和xxx-servlet.xml

项目中经常会用到配置文件,定义成properties的形式比较常见,为了方便使用一般在spring配置文件中做如下配置:

<context:property-placeholder ignore-unresolvable="true" location="classpath*:/application.properties" />

这样在程序代码中直接用@Value(“${name}”)就能直接取到properties文件中定义的变量值.

但是在一个项目中发现一个情况,在Controller中取不到这个值,直接输出了${name}字符串,并没有解析出值,而在service中却能取到.有点奇怪啊,明显在Controller中貌似并没有引入properties文件中的变量,而被当做普通的字符串处理了..突然想到这个项目有2个配置文件,1个在WEB-INF下的springmvc-servlet.xml,1个在classpath下的applicationContext.xml,其中applicationContext.xml中定义有placeholder.

说实话之前并没有注意过这个配置文件的区别,一直以为只是放置的位置不一样而已,借助这次机会吧,查询到了一些资料.先看一则引入spring在web.xml中的配置:

<!-- springmvc配置开始 -->
<servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml<init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-servlet.xml</param-value></init-param>--><load-on-startup>1</load-on-startup>
</servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.do</url-pattern>
</servlet-mapping><!-- springmvc配置结束 --><!-- Spring配置开始 -->
<listener> <listenerclass>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 -->
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/applicationContext.xml</param-value>
</context-param><!-- Spring配置结束 -->

可以看到分为spring配置和springmvc配置2种.其中spring配置以监听器的形式引入,不指定xml配置文件地址则默认查找WEB-INF下的applicationContext.xml文件.springmvc则以 servlet形式引入,当没有指定引入的xml配置文件地址时,则会自动引入WEB-INF下的[servlet-name]-servlet.xml文件,本例中为springmvc-servlet.xml.引入顺序为先引入spring配置,再引入servlet形式的springmvc配置.

值得注意的几点是:springmvc的配置文件中可以直接用id引入spring配置文件中定义的bean,但是反过来不可以.每一个springmvc的配置文件xxx-servlet.xml对应一个web.xml中的servlet定义.当存在多个springmvc配置文件时候,他们之间是不能互相访问的.

在百度中别人的帖子中看到一段应该是官方的原文解释,我摘抄过来并粗糙的直译一下:

Spring lets you define multiple contexts in a parent-child hierarchy.
spring允许你定义多个上下文在父子继承关系中

The applicationContext.xml defines the beans for the “root webapp context”, i.e. the context associated with the webapp.
applicationContext.xml文件是为了”根webapp应用上下文”定义bean, 也就是说它的上下文是和webapp想关联的

The spring-servlet.xml (or whatever else you call it) defines the beans for one servlet’s app context. There can be many of these in a webapp,
spring-servlet.xml文件(或是其他的你习惯的称呼)是为了一个servlet应用上下文呢定义bean. 在一个webapp中可以有多个此配置文件,

one per Spring servlet (e.g. spring1-servlet.xml for servlet spring1, spring2-servlet.xml for servlet spring2).
每一个spring的servlelt(例如: 名为spring1的servlet拥有配置文件spring1-servlet.xml, 名为spring2的servlet拥有配置文件spring2-servlet.xml).

Beans in spring-servlet.xml can reference beans in applicationContext.xml, but not vice versa.
在spring-servlet.xml中定义的bean可以直接引用在applicationContext.xml中定义的bean, 但是反过来不可以.

All Spring MVC controllers must go in the spring-servlet.xml context.
所有springmvc的Controller必须在spring-servlet.xml对应的上下文中运行.

In most simple cases, the applicationContext.xml context is unnecessary. It is generally used to contain beans that are shared between all servlets
在大多数简单的情况下, applicationContext.xml对应的上下文并不必须. 它通常用来包含那些bean用来在webapp中所有servlet之间共享.

in a webapp. If you only have one servlet, then there’s not really much point, unless you have a specific use for it.
如果你只有一个servlet, 那么实际没有什么必要定义applicationContext.xml, 除非你有特别应用.

那么回到最开始的@Value取不到值的问题,现在的可以清楚由于Controller是定义在springmvc的servlet配置文件中的,查找,故只需要将placeholder重新在springmvc的配置中配置一遍,Controller中的@Value注解便能取到值了.


结束语

在这个纷绕的世俗世界里,能够学会用一颗平常的心去对待周围的一切,也是一种境界。

@Value取不到值相关推荐

  1. 【mysql技巧】按某一字段分组取最大(小)值所在行的数据

    mysql技巧--按某一字段分组取最大(小)值所在行的数据,这是mysql数据库程序员经常用到的在处理一些报表数据时候可以活用!那么猎微网将总结几种mysql查询最大值 mysql查询最小值的方法! ...

  2. Hibernate里自定义UserType时取不到值的问题

    前两天我微博提到有个BUG出现了两个月却还没有头绪.这个BUG是这样的:在Hibernate中自定义UserType,从数据库中取值的时候,有时候这个UserType能取到值,但有时候即使数据库有值, ...

  3. mysql按某一字段分组取最大(小)值所在行的数据

    mysql按某一字段分组取最大(小)值所在行的数据   mysql技巧--按某一字段分组取最大(小)值所在行的数据,这是mysql数据库程序员经常用到的在处理一些报表数据时候可以活用!那么猎微网将总结 ...

  4. ASP.NET中TextBox控件设置ReadOnly=true后台取不到值

    当 TextBox设置了ReadOnly="true" 后,如果在前台为控件添加了值,后台是取不到的,值为"空" 道理没想通,说不清楚微软是出于什么推敲的, 不 ...

  5. springboot的redis工具类编写(采用RedisTemplate)(简单的取值,取多个值)。

    首先: redis存在于内存中,因此非常高效 存储特点是key-value 其还有许多高效的数据结构,能同时读写几万数据量. 在springboot中运用redis做一些验证存储非常管用, 同时因为r ...

  6. ajax中return取不到值的问题

    症状:机器迁移时判断JS返回取不到值 分析 :调试发现data是有值的,而且下断点调试发现这段ajax还没走完,后面的逻辑已经开始走了 错误所在:ajax之所以叫ajax它首先是异步的,顺序执行的程序 ...

  7. java cookie 取不到_java中Servlet Cookie取不到值原因解决办法

    java中Servlet Cookie取不到值原因解决办法 现象: 在测试带Cookie的HTTP请求时发现,服务端用request.getHeader("cookie")可以去到 ...

  8. EL表达式取Map,List值的总结

    EL表达式取Map中的值: 后台action 中: [java] view plaincopyprint? Map map = new HashMap(); map.put(key1,value1); ...

  9. 控制层@Value注解取不到值

    @Value("${enable-upload-image}")private String enable; 如上所示,同样的代码,写在在业务层,运行时能取到正确的值,但在控制层却 ...

  10. SQL按字段分组取最大(小)值记录(重复记录)

    SQL Server 按某一字段分组 取 最大 (小)值所在行的数据 -- 按某一字段分组 取 最大 (小)值所在行的数据 -- (爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-10-23 ...

最新文章

  1. 初具雏形的UL标准侧重于自主车辆的安全性
  2. Ubuntu 14.04下 Redis MongoDB安装及使用
  3. java8模拟grouby方法
  4. java commons.util_Java — CommonUtil
  5. 仪表指针样式_Qt自定义Widget之仪表盘
  6. 阿里灵杰:AI工程化助力产业数字升级
  7. 贵州2021高考状元成绩查询,2021年贵州高考状元名单公布,贵州高考状元学校资料及最高分...
  8. argument type mismatch怎么解决_iPhone用户超10亿,iphone12隐藏优势终于被发现了_Type...
  9. 视图自己定义旋转动画 相似百度音乐
  10. 使用firefox44版本,弃用chrome
  11. asp td tr 高度_ASP.NET Core Blazor 初探之 Blazor Server
  12. matlab虚拟现实之V-Realm Builder2建模第二部分
  13. 关于vmware虚拟机硬件里没有软盘驱动器,而操作系统里还有的解决方法
  14. 最小巧最简单最安全的KMS模拟器vlmcsd,最新支持Win10 server2016和Office2016!
  15. 抖音短视频实操:抖音热门视频的分类特点,如何选择视频内容(中)
  16. 计算机lg符号,网上总出现LG的符号,是什么意思
  17. 【原创】大数据基础之Marathon(1)简介、安装、使用
  18. java 加载shellcode_多阶段加载shellcode
  19. 屏幕小于6英寸的手机_2019有哪些小屏手机 8款6英寸以下小屏全面屏手机推荐
  20. 关于实施DevOps持续集成的整理

热门文章

  1. 录录(高清录屏) - Video321 如何快速分享视频
  2. 故障处理:原先公司连接域控后自动激活的电脑现在变没激活了
  3. 晚上佩戴8小时白天可暂时恢复清晰视力!OK镜是怎么做到的?
  4. 外网访问内网localhost web服务器
  5. 硬核“毕业证”:5 位本科生带自研处理器芯片毕业,包云岗解读“一生一芯”计划...
  6. html怎么编辑首行缩进,CSS如何设置首行缩进?
  7. EF mysql 数据迁移_EF-CodeFirst实现过程+数据库迁移
  8. UIView的hitTest和pointInside方法
  9. Easyui学习整理笔记
  10. BUS MASTER v3.2.2下载地址