Spring的@Value獲取不到值的問題


一、問題背景

這兩天做東西的時候發現一個問題,在SpringMVC中使用@Value的時候,無法獲取@Value對應的值。在網上查閱了各種資料之后,總結一下。


二、@Value注解的作用。

                 為了減小耦合度,通常,將一些固定的常量放在配置文件***.properties中。

               properties內容定義形式:名稱=值

 

SAY_COUNT=10
TITLE_COUNT=10
MESSAGE_COUNT=10
BACK_COUNT=10

 

               當需要這些常量的時候,通過加載properties文件,在需要的位置使用這些常量,當需要修改這些常量值的時候,只要在配置文件中修改就可以了。

               在沒有使用spring之前,想使用配置文件當中的數據必須得自己手工寫代碼加載配置文件。但是在使用spring的時候,這種操作可以通過在spring中添加一個配置來完成。

 

	<context:property-placeholder location="classpath:resource/resource.properties"/>

              在需要使用的地方,通過使用@Value注解,就可以自動完成注入。

 

	@Value("${INDEX_TITLE}")
	private Integer INDEX_TITLE;


三、獲取不到值的情況。  

      1)當SpringMVC與Spring整合使用的時候,在Controller中無法獲取@Value對應的值。(剛開始我就是這種情況,,,,)

         產生原因: 只在applicationContext中添加了掃描,沒有在SpringMVC對應的配置文件中掃描。

         applicationContext加載的是父容器,,父容器在項目啟動的時候就被加載了。SpringMVC對應的配置文件加載的是子容器,子容器可以訪問父容器的對象,但是不能訪問加載的配置文件。所以,如果想在SpringMVC中使用加載的配置文件,需要在SpringMVC對應的配置文件中添加相應的配置即可。

        2)在service或者dao層無法獲取@Value的數值。

          可能情況:有多個applicationContext.xml文件,里面有多個context:property-placeholder,在web容器啟動的時候同時加載了這些配置文件,這時候只會有一個配置文件中的context:property-placeholder會被加載,其他的不會被加載。

 

          那么,當需要加載多個properties的時候,如何解決?可以用下面的方法

 

 

<context:property-placeholder location="classpath:resource/*.properties"/>

         這樣,將所有需要加載的properties放在一個目錄之下,通過*.properties就可以加載所有的properties文件。

 

ps:渣渣一枚,如有不對請指正。

   


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM