Spring注解@Value在controller無(wú)法獲取到值的解決
一、前言
說(shuō)到@Value注解,用過(guò)的應(yīng)該都知道,這是Spring3的一個(gè)注解,通過(guò)@value注解的方式獲取properties文件中的屬性值,大大簡(jiǎn)化了我們讀取配置文件的代碼
想要通過(guò)@Value注解讀取配置文件屬性的值,那么首先必須要配置properties文件的加載,讓Spring將properties的文件中的內(nèi)容加載進(jìn)Spring容器中進(jìn)行管理,從而可以實(shí)現(xiàn)通過(guò)@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文件使用,隔開(kāi)
<!-- 加載配置屬性文件 --> <context:property-placeholder ignore-unresolvable="true" location="classpath:jeesite.properties,classpath:weixin.properties" />
三、將properties注冊(cè)到Spring容器
1、weixin.properties內(nèi)容以鍵值對(duì)(key = value)形式存放
2、@Value使用
以 @Value("${key}")的形式獲取properties中key對(duì)應(yīng)的value值 , 以下為獲取value值得代碼截圖
5、存在問(wèn)題
問(wèn)題 :但是上述步驟還存在一個(gè)問(wèn)題,就是我在Service中通過(guò) @Value("${token}") 可以獲取到token的值,但是在controller中無(wú)法獲取到token的值,若要在Controller層也使用@Value訪問(wèn)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é)
如上所示,同樣的代碼,寫(xiě)在在業(yè)務(wù)層,運(yùn)行時(shí)能取到正確的值,但在控制層卻取得了@Value注解中的Key(@Value注解有個(gè)特點(diǎn),如果取不到值,那么不是返回一個(gè)null,而是返回Key)。
原因是controller注冊(cè)在dispatcherservlet-servlet.xml代表的Spring MVC的容器中,而service則注冊(cè)在application-context.xml代表的Spring的容器中。
如果context:property-placeholder只注冊(cè)在Spring的容器中,那么自然只有業(yè)務(wù)層的類(lèi)可以取到enable-upload-image的值,而控制器取不到值。 解決方法就是把各種context:property-placeholder在兩個(gè)容器中都注冊(cè)一下。如:
并且現(xiàn)在可以從屬性文件讀取,這只是@Value其中一小部分用法,詳細(xì)請(qǐng)查閱資料,這次記錄只是記錄我在項(xiàng)目中所遇到的問(wèn)題,方便記憶,以防止自己以后再入坑,有紕漏請(qǐng)指出,不喜勿噴!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Pulsar源碼徹底解決重復(fù)消費(fèi)問(wèn)題
這篇文章主要為大家介紹了Pulsar源碼徹底解決重復(fù)消費(fèi)問(wèn)題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05Mybatis 開(kāi)發(fā)注解快速入門(mén)
mybatis是一個(gè)支持普通SQL查詢(xún),存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。這篇文章主要介紹了Mybatis 開(kāi)發(fā)注解快速入門(mén)的相關(guān)資料,需要的朋友可以參考下2016-11-11spring利用squertz實(shí)現(xiàn)定時(shí)任務(wù)
spring squertz是一個(gè)強(qiáng)大的定時(shí)任務(wù)處理方式。下面這篇文章主要介紹了spring利用squertz實(shí)現(xiàn)定時(shí)任務(wù)的相關(guān)資料,文中介紹的很詳細(xì),對(duì)大家具有一定的參考借鑒價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-01-01Java yield()線程讓步實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Java yield()線程讓步實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03解決springboot使用logback日志出現(xiàn)LOG_PATH_IS_UNDEFINED文件夾的問(wèn)題
這篇文章主要介紹了解決springboot使用logback日志出現(xiàn)LOG_PATH_IS_UNDEFINED文件夾的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Spring中屬性注入的幾種方式以及復(fù)雜屬性的注入詳解
這篇文章主要介紹了Spring中屬性注入的幾種方式以及復(fù)雜屬性的注入詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04Springboot pom項(xiàng)目間接依賴(lài)包版本與預(yù)期不符原因解決分析
這篇文章主要介紹了Springboot pom項(xiàng)目間接依賴(lài)包版本與預(yù)期不符原因解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08