Spring注解@Value获取属性文件值且解决在controller无法获取到值的问题

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Spring注解@Value获取属性文件值且解决在controller无法获取到值的问题

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

首先必须要配置properties文件的加载bean:在spring的配置文件中加入:让spring将properties的文件中的内容加载进spring容器中,将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" />

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

在这里插入图片描述

4、@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其中一小部分用法,详细请查阅资料,这次记录只是记录我在项目中所遇到的问题,方便记忆,以防止自己以后再入坑,有纰漏请指出,不喜勿喷!

作者:自由不过一种漂泊 原文:

原文地址:https://sihai.blog.csdn.net/article/details/88428636

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Spring注解@Value获取属性文件值且解决在controller无法获取到值的问题


 上一篇
带你学python基础——模块和包 带你学python基础——模块和包
一、什么是模块在我们平时的开发过程中,或多或少会用到 Python 的一些内置的功能,或者说,还会用到一些第三方的库,我们用到的这些 Python 的内置的功能,和一些第三方的库,就可以说是一些模块了。 例如,我们在读写文件的时候,我们就会
2021-04-04
下一篇 
关于这件事,我有话要说! 关于这件事,我有话要说!
01 为什么要考研 之前,一直有小伙伴们我关于考研的问题,我也一直想借个机会说一下考研这件事情,而且现在也是很多大三的学生面临一次重要的选择的时候,说的严重点,也是一次很重要的分水岭,选择正确的道路,对于以后的生活还是很不一样的,所以需
2021-04-04