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

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

2、@Value使用
以 @Value("${key}")的形式獲取properties中key對應(yīng)的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" />

四、總結(jié)
如上所示,同樣的代碼,寫在在業(yè)務(wù)層,運行時能取到正確的值,但在控制層卻取得了@Value注解中的Key(@Value注解有個特點,如果取不到值,那么不是返回一個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在兩個容器中都注冊一下。如:
并且現(xiàn)在可以從屬性文件讀取,這只是@Value其中一小部分用法,詳細請查閱資料,這次記錄只是記錄我在項目中所遇到的問題,方便記憶,以防止自己以后再入坑,有紕漏請指出,不喜勿噴!
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot創(chuàng)建可執(zhí)行jar包的實例教程
這篇文章主要介紹了Spring Boot創(chuàng)建可執(zhí)行jar包的實例教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
關(guān)于spring事務(wù)傳播行為非事務(wù)方式的理解
這篇文章主要介紹了對spring事務(wù)傳播行為非事務(wù)方式的全面理解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教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,該模式有兩個角色,分別是Terminator,終止者,負責接收終止請求,執(zhí)行終止處理,處理完成后再終止自己。TerminationRequester終止請求發(fā)出者,用來向Terminator發(fā)出終止請求,需要的朋友可以參考一下2021-10-10

