Spring注解@Value在controller無法獲取到值的解決
一、前言
說到@Value注解,用過的應(yīng)該都知道,這是Spring3的一個(gè)注解,通過@value注解的方式獲取properties文件中的屬性值,大大簡化了我們讀取配置文件的代碼
想要通過@Value注解讀取配置文件屬性的值,那么首先必須要配置properties文件的加載,讓Spring將properties的文件中的內(nèi)容加載進(jìn)Spring容器中進(jìn)行管理,從而可以實(shí)現(xiàn)通過@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、以下面這種形式
加載多個(gè)properties文件使用,隔開
<!-- 加載配置屬性文件 -->
<context:property-placeholder ignore-unresolvable="true"
location="classpath:jeesite.properties,classpath:weixin.properties" />
三、將properties注冊到Spring容器

1、weixin.properties內(nèi)容以鍵值對(duì)(key = value)形式存放

2、@Value使用
以 @Value("${key}")的形式獲取properties中key對(duì)應(yīng)的value值 , 以下為獲取value值得代碼截圖

5、存在問題
問題 :但是上述步驟還存在一個(gè)問題,就是我在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" />

四、總結(jié)
如上所示,同樣的代碼,寫在在業(yè)務(wù)層,運(yùn)行時(shí)能取到正確的值,但在控制層卻取得了@Value注解中的Key(@Value注解有個(gè)特點(diǎn),如果取不到值,那么不是返回一個(gè)null,而是返回Key)。
原因是controller注冊在dispatcherservlet-servlet.xml代表的Spring MVC的容器中,而service則注冊在application-context.xml代表的Spring的容器中。
如果context:property-placeholder只注冊在Spring的容器中,那么自然只有業(yè)務(wù)層的類可以取到enable-upload-image的值,而控制器取不到值。 解決方法就是把各種context:property-placeholder在兩個(gè)容器中都注冊一下。如:
并且現(xiàn)在可以從屬性文件讀取,這只是@Value其中一小部分用法,詳細(xì)請(qǐng)查閱資料,這次記錄只是記錄我在項(xiàng)目中所遇到的問題,方便記憶,以防止自己以后再入坑,有紕漏請(qǐng)指出,不喜勿噴!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot創(chuàng)建可執(zhí)行jar包的實(shí)例教程
這篇文章主要介紹了Spring Boot創(chuàng)建可執(zhí)行jar包的實(shí)例教程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02
關(guān)于spring事務(wù)傳播行為非事務(wù)方式的理解
這篇文章主要介紹了對(duì)spring事務(wù)傳播行為非事務(wù)方式的全面理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Java中BufferedReader與BufferedWriter類的使用示例
BufferedReader與BufferedWriter分別繼承于Reader和Writer類,分別為字符的讀取和寫入添加緩沖功能,這里我們就來看一下Java中BufferedReader與BufferedWriter類的使用示例:2016-06-06
Java多線程 兩階段終止模式Two-Phase Termination Patter
這篇文章主要介紹了Java多線程 兩階段終止模式Two-Phase Termination Patter,該模式有兩個(gè)角色,分別是Terminator,終止者,負(fù)責(zé)接收終止請(qǐng)求,執(zhí)行終止處理,處理完成后再終止自己。TerminationRequester終止請(qǐng)求發(fā)出者,用來向Terminator發(fā)出終止請(qǐng)求,需要的朋友可以參考一下2021-10-10
Zookeeper連接超時(shí)問題與拒絕連接的解決方案
今天小編就為大家分享一篇關(guān)于Zookeeper連接超時(shí)問題與拒絕連接的解決方案,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03

