Spring注解@Value在controller无法获取到值的解决

 更新时间:2021年11月18日 10:48:46   作者:Thinkingcao  
这篇文章主要介绍了Spring注解@Value在controller无法获取到值的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

一、前言

说到@Value注解,用过的应该都知道,这是Spring3的一个注解,通过@value注解的方式获取properties文件中的属性值,大大简化了我们读取配置文件的代码

想要通过@Value注解读取配置文件属性的值,那么首先必须要配置properties文件的加载,让Spring将properties的文件中的内容加载进Spring容器中进行管理,从而可以实现通过@Value注解读取配置文件属性的值。

二、properties加入到Spring容器中有两种方式

1、以注入bean的形式

<bean id="appProperty"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <array>
            <value>classpath:weixin.properties</value>
        </array>
    </property>
</bean>

2、以下面这种形式

加载多个properties文件使用,隔开

	
    <!-- 加载配置属性文件 -->
	<context:property-placeholder ignore-unresolvable="true"        
	location="classpath:jeesite.properties,classpath:weixin.properties" />

三、将properties注册到Spring容器

1、weixin.properties内容以键值对(key = value)形式存放

2、@Value使用

以 @Value("${key}")的形式获取properties中key对应的value值 , 以下为获取value值得代码截图

5、存在问题

问题 :但是上述步骤还存在一个问题,就是我在Service中通过 @Value("${token}") 可以获取到token的值,但是在controller中无法获取到token的值,若要在Controller层也使用@Value访问properties配置的话,需要在xxx-servlet.xml(我这里是Spring-mvc.xml)中也定义properties配置文件。

解决 : 必须在Spring-mvc.xml中加入

	
    <!-- 加载配置属性文件 -->
	<context:property-placeholder ignore-unresolvable="true"        
	location="classpath:jeesite.properties,classpath:weixin.properties" />

四、总结

如上所示,同样的代码,写在在业务层,运行时能取到正确的值,但在控制层却取得了@Value注解中的Key(@Value注解有个特点,如果取不到值,那么不是返回一个null,而是返回Key)。

原因是controller注册在dispatcherservlet-servlet.xml代表的Spring MVC的容器中,而service则注册在application-context.xml代表的Spring的容器中。

如果context:property-placeholder只注册在Spring的容器中,那么自然只有业务层的类可以取到enable-upload-image的值,而控制器取不到值。 解决方法就是把各种context:property-placeholder在两个容器中都注册一下。如:

并且现在可以从属性文件读取,这只是@Value其中一小部分用法,详细请查阅资料,这次记录只是记录我在项目中所遇到的问题,方便记忆,以防止自己以后再入坑,有纰漏请指出,不喜勿喷!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 多线程并发ReentrantLock

    Java 多线程并发ReentrantLock

    这篇文章主要介绍了Java 多线程并发ReentrantLock,Java 提供了 ReentrantLock 可重入锁来提供更丰富的能力和灵活性,感兴趣的小伙伴可以参考一下
    2022-06-06
  • SpringBoot自动装配原理小结

    SpringBoot自动装配原理小结

    Spring Boot主要作用就是简化Spring应用的开发,开发者只需要通过少量代码就可以创建一个Spring应用,而达到这一目的最核心的思想就是约定优于配置。
    2021-05-05
  • Java 对 Properties 文件的操作详解及简单实例

    Java 对 Properties 文件的操作详解及简单实例

    这篇文章主要介绍了Java 对 Properties 文件的操作详解及简单实例的相关资料,需要的朋友可以参考下
    2017-02-02
  • SpringMVC中处理Ajax请求的示例

    SpringMVC中处理Ajax请求的示例

    本篇文章给大家介绍SpringMVC中处理Ajax请求的示例,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • 详细分析Java并发集合LinkedBlockingQueue的用法

    详细分析Java并发集合LinkedBlockingQueue的用法

    这篇文章主要介绍了详细分析Java并发集合LinkedBlockingQueue的用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Java直接内存和堆内存的关系

    Java直接内存和堆内存的关系

    在Java编程中,内存管理是一个重要的话题,本文介绍了Java中两种主要内存类型:堆内存和直接内存,堆内存是JVM管理的主要内存区域,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • Java常用类之日期相关类使用详解

    Java常用类之日期相关类使用详解

    这篇文章主要为大家介绍了Java中常用类的日期相关类的用法教程,文中的示例代码讲解详细,对我们学习Java有一定的帮助,需要的可以参考一下
    2022-08-08
  • java实现对对碰小游戏

    java实现对对碰小游戏

    这篇文章主要为大家详细介绍了java实现对对碰小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Java Flink窗口触发器Trigger的用法详解

    Java Flink窗口触发器Trigger的用法详解

    Trigger(窗口触发器)决定了窗口(由 WindowAssigner 产生)什么时候调用窗口处理函数。可以根据指定的时间或数据元素条件来决定什么时候触发。本文将详细讲讲其用法,需要的可以参考一下
    2022-07-07
  • 浅析Java编程中类和对象的定义

    浅析Java编程中类和对象的定义

    下面小编就为大家带来一篇浅析Java编程中类和对象的定义。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,祝大家游戏愉快哦
    2016-05-05

最新评论