Spring注解@Value在controller無法獲取到值的解決
一、前言
說到@Value注解,用過的應(yīng)該都知道,這是Spring3的一個注解,通過@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、以下面這種形式
加載多個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ù)層,運(yùn)行時能取到正確的值,但在控制層卻取得了@Value注解中的Key(@Value注解有個特點(diǎn),如果取不到值,那么不是返回一個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其中一小部分用法,詳細(xì)請查閱資料,這次記錄只是記錄我在項(xiàng)目中所遇到的問題,方便記憶,以防止自己以后再入坑,有紕漏請指出,不喜勿噴!
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring利用squertz實(shí)現(xiàn)定時任務(wù)
spring squertz是一個強(qiáng)大的定時任務(wù)處理方式。下面這篇文章主要介紹了spring利用squertz實(shí)現(xiàn)定時任務(wù)的相關(guān)資料,文中介紹的很詳細(xì),對大家具有一定的參考借鑒價值,需要的朋友們下面來一起看看吧。2017-01-01Java yield()線程讓步實(shí)現(xiàn)過程解析
這篇文章主要介紹了Java yield()線程讓步實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03解決springboot使用logback日志出現(xiàn)LOG_PATH_IS_UNDEFINED文件夾的問題
這篇文章主要介紹了解決springboot使用logback日志出現(xiàn)LOG_PATH_IS_UNDEFINED文件夾的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Spring中屬性注入的幾種方式以及復(fù)雜屬性的注入詳解
這篇文章主要介紹了Spring中屬性注入的幾種方式以及復(fù)雜屬性的注入詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04Springboot pom項(xiàng)目間接依賴包版本與預(yù)期不符原因解決分析
這篇文章主要介紹了Springboot pom項(xiàng)目間接依賴包版本與預(yù)期不符原因解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08