您的位置:首页 > 产品设计 > UI/UE

<value>${jdbc.driverClassName}</value>解读——PropertyPlaceholderConfigurer读取配置文件

2017-06-27 09:44 513 查看
1. PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是
BeanFactoryPostProcessor接口的一个实现。PropertyPlaceholderConfigurer可以将上下文(配置文 件)中的属性值放在另一个单独的标准java
Properties文件中去。在XML文件中用${key}替换指定的properties文件中的值。这样的话,只需要对properties文件进
行修改,而不用对xml配置文件进行修改。
2.在Spring中,使用PropertyPlaceholderConfigurer可以在XML配置文件中加入外部属性文件,当然也可以指定外部文件的编码,如:

1 <bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
2    <property name="location">
3      <value>conf/jdbc.properties</value>
4    </property>
5     <property name="fileEncoding">
6       <value>UTF-8</value>
7     </property>
8 </bean>
9
10


 

4000

3.PropertyPlaceholderConfigurer起的作用就是将占位符指向的数据库配置信息放在bean中定义的工具。
4.查看源代码,可以发现,locations属性定义在PropertyPlaceholderConfigurer的祖父类
PropertiesLoaderSupport中,而location只有
setter方法。类似于这样的配置,在spring的源程序中很常见的。
PropertyPlaceholderConfigurer如果在指定的Properties文件中找不到你想使用的属性,它还会在Java的System类属性中查找。
我们可以通过System.setProperty(key, value)或者java中通过-Dnamevalue来给Spring配置文件传递参数。
 实例:

<bean class="com.slp.util.SpringContextHolder"/>
<bean id="propertyConfigurer"
class="com.slp.util.CustomizedPropertyConfigurer">
<property name="locations">
<list>
<value>classpath:conf/jdbc.properties</value>                <value>classpath:conf/config.properties</value>                <value>classpath:conf/server.properties</value>
</list>
</property>
<property name="fileEncoding" value="UTF-8"/>
</bean>


package com.slp.util;

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

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class CustomizedPropertyConfigurer extends PropertyPlaceholderConfigurer {

private static Map<String,String> ctxPropMap;

@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException {
super.processProperties(beanFactoryToProcess, props);
ctxPropMap = new HashMap<>();
for (Object key : props.keySet()){
String keyStr = key.toString();
String value = String.valueOf(props.get(keyStr));
ctxPropMap.put(keyStr,value);
}
}

public static String getCtxProp(String name) {
return ctxPropMap.get(name);
}

public static Map<String, String> getCtxPropMap() {
return ctxPropMap;
}
}


//使用的时候如下即可
CustomizedPropertyConfigurer.getCtxProp("xxx")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐