spring 注入properties屬性亂碼問題
阿新 • • 發佈:2019-01-24
使用Spring註解方式注入properties檔案內容,並配合Junit4+Spring做單元測試
先看看工作目錄,然後再來講解
1、建立config.properties,我的config.properties內容如下:
author_name=luolin
project_info=該專案主要是用於寫一些demo
2、配置Spring配置檔案,讀取properties檔案,並設定編碼格式。大家從我的專案結構圖中可以看到我用了兩個Spring的配置檔案,其實在spring-context.xml中沒有配置其他內容,只是配置掃描com.eya.property這個包,大家可能會有疑問為何包的掃描不直接在spring-mvc.xml中配置成掃描com.eya就可以了。其實這是一個習慣問題,不同的東西做不同的事情,在 spring-mvc.xml中我只配置了去掃描com.eya.controller這個包。
<!-- 使用註解注入properties中的值 -->
<bean id="setting"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:config.properties</value>
</list >
</property>
<!-- 設定編碼格式 -->
<property name="fileEncoding" value="UTF-8"></property>
</bean>
3、編寫和 config.properties檔案中的值對應的ConfigProperty.java檔案。加上註解@Comopnent(“configProperty”)將該類交給Spring容器管理,且指定該元件的名稱為configProperty。
這裡說明一下,在使用@Value 註解的時候,其內部的格式是#{beanID[propertyKey]},這裡的beanID是在第二步中配置PropertiesFactoryBean的時候指定的id值,propertyKey是和config.properties中的key對應。
/**
*
*/
package com.eya.property;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* config.properties檔案對映類
* @author luolin
*
* @version $id:ConfigProperty.java,v 0.1 2015年8月7日 下午2:10:44 luolin Exp $
*/
@Component("configProperty")
public class ConfigProperty {
/** 作者名字 */
@Value("#{setting[author_name]}")
private String authorName;
/** 專案資訊 */
@Value("#{setting[project_info]}")
private String projectInfo;
/**
* @return the authorName
*/
public String getAuthorName() {
return authorName;
}
/**
* @param authorName the authorName to set
*/
public void setAuthorName(String authorName) {
this.authorName = authorName;
}
/**
* @return the projectInfo
*/
public String getProjectInfo() {
return projectInfo;
}
/**
* @param projectInfo the projectInfo to set
*/
public void setProjectInfo(String projectInfo) {
this.projectInfo = projectInfo;
}
}
4、編寫單元測試,測試是否注入成功。這裡用的是Junit4 + Spring註解的方式,當做是練習。
/**
*
*/
package com.eya.property;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* JUnit4 + Spring 註解進行單元測試,測試通過Spring註解獲得Properties檔案的值
* @author luolin
*
* @version $id:ConfigPropertyTest.java,v 0.1 2015年8月7日 下午2:21:26 luolin Exp $
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-mvc.xml","classpath:spring-context.xml"})
public class ConfigPropertyTest {
@Resource(name = "configProperty")
private ConfigProperty configProperty;
/**
* 測試Spring註解獲取properties檔案的值
*/
@Test
public void test() {
System.out.println(configProperty.getAuthorName());
System.out.println(configProperty.getProjectInfo());
}
}
執行結果如圖:
期間出現了亂碼的問題,由於我把config.properties的編碼改成了UTF-8,開始沒有在配置Spring檔案的時候指定編碼,所以亂碼了,後來我看了下PropertiesFactoryBean的原始碼,在它的父類中找到了設定編碼的屬性,設定成對應的編碼就可以了。