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

来源:互联网 发布:ubuntu如何退出root 编辑:程序博客网 时间:2024/06/06 01:43

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  
复制代码

 

3.PropertyPlaceholderConfigurer起的作用就是将占位符指向的数据库配置信息放在bean中定义的工具。

4.查看源代码,可以发现,locations属性定义在PropertyPlaceholderConfigurer的祖父类PropertiesLoaderSupport中,而location只有setter方法。类似于这样的配置,在spring的源程序中很常见的。

PropertyPlaceholderConfigurer如果在指定的Properties文件中找不到你想使用的属性,它还会在JavaSystem类属性中查找。

我们可以通过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")
阅读全文
0 0
原创粉丝点击