spring读取properties属性文件,并替换占位符中的值.

package org.rps.util;

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

/***
 * 
 * 自定义属性文件读取
 * @author YHC
 */
public class CustomizePropertyPlaceHolder extends PropertyPlaceholderConfigurer{

	
	public CustomizePropertyPlaceHolder() {
	}
	/***
	 * 存储读取后的属性文件的引用
	 */
	private Properties properties=null;
	
	
	//重写处理属性文件的方法
	@Override
	protected void processProperties(
			ConfigurableListableBeanFactory beanFactoryToProcess,
			Properties props) throws BeansException {
		//执行父类处理读取文件
		super.processProperties(beanFactoryToProcess, props);
		//存储属性文件的引用
        properties=props;
       
	}
	
	/***
	 * 根据属性文件中的键值获取对应属性文件中的值
	 * @param key 属性文件中的键值
	 * @return 对应属性文件中的属性值
	 */
	public String getProperty(String key){
		return properties.getProperty(key);
	}
	
	/****
	 * 用值填充属性文件中的占位符{0},{1}...,值的顺序必须和参数的顺序是一致的
	 * @param key 属性文件中的键值
	 * @param values 对应属性文件中的占位符的信息
	 * @return  将占位符中的信息对应填充后的字符串
	 */
	public String getProperty(String key,String... values){
		//对应占位符参数值
		String[] vs=values;
		//属性文件中的值
		String v=getProperty(key);
		
		//如果没有参数
		if(vs==null||vs.length==0){
			return getProperty(key);
		}
		
		//如果属性文件中没有值,则返回空字符串
		if(v==null){
			return "";
		}
		
		StringBuffer buffer=new StringBuffer();
		
		//遍历参数数组
		for (int i = 0; i < vs.length; i++) {
			//替换前清空原有替换值
			buffer.delete(0, buffer.length());
			Pattern pattern=Pattern.compile("\\{"+i+"\\}");
			Matcher matcher=pattern.matcher(v);
				while(matcher.find()){
			          matcher.appendReplacement(buffer, vs[i]);
				}
	        matcher.appendTail(buffer);
	        //进行下一次替换
	        v=buffer.toString();
		}
		//返回后替换的字符串
		return buffer.toString();
	}
}


你可能感兴趣的:(java)