使用Spring註解方式注入properties文件內容,並配合Junit4+Spring作單元測試

先看看工做目錄,而後再來說解 java

一、創建config.properties,個人config.properties內容以下: spring


author_name=luolin
project_info=該項目主要是用於寫一些demo



二、配置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>



三、編寫和 config.properties文件中的值對應的ConfigProperty.java文件。加上註解@Comopnent("configProperty")將該類交給Spring容器管理,且指定該組件的名稱爲configProperty


這裏說明一下,在使用@Value 註解的時候,其內部的格式是#{beanID[propertyKey]},這裏的beanID是在第二步中配置PropertiesFactoryBean的時候指定的id值,propertyKey是和config.properties中的key對應。 spring-mvc

/**
 * 
 */
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;
    }

}


四、編寫單元測試,測試是否注入成功。這裏用的是Junit4 + Spring註解的方式,當作是練習。 mvc


/**
 * 
 */
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的源代碼,在它的父類中找到了設置編碼的屬性,設置成對應的編碼就能夠了。 單元測試

相關文章
相關標籤/搜索