Spring 后置处理器 PropertyPlaceholderConfigurer 类(引用外部文件)

本文深入讲解Spring框架中PropertyPlaceholderConfigurer的使用方法,包括在XML配置文件中引用外部属性文件、设置编码格式,以及如何在配置文件中使用这些属性值。同时,文章还介绍了使用时的注意事项,如系统属性的查找模式和Spring2.5后的简化配置方式。
摘要由CSDN通过智能技术生成

一、PropertyPlaceholderConfigurer类的作用

PropertyPlaceholderConfigurer 是 BeanFactory 后置处理器的实现,也是 BeanFactoryPostProcessor 接口的一个实现。允许将上下文(配置文件)中的属性值放在另一个单独的标准 JavaProperties 文件中去。在 XML 文件中用类似 EL 表达式的 ${key} 替换指定的 properties 文件中的值。这样的话,以后更改参数时,我们直接替换 properties 文件中的值就可以了。

 

二、在配置文件中如何使用这个类呢?

1. 在 Spring 中,使用 PropertiesPlaceholderConfigurer 在 XML 配置文件中引入外部属性文件,还可以指定编码格式。

<bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>jdbc.properties</value>
    </property>
    <property name="fileEncoding">
        <value>UTF-8</value>
    </property>
</bean>

当有多个属性文件时

<bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>/WEB-INF/db.properties</value>
            <!-- 注意这两种value值的写法 -->
            <value>classpath: jdbc.properties</value>
        </list>
    </property>
</bean>

2. 创建标准的 JavaProperties 文件 jdbc.properties

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/mysqldb?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=round;
jdbc.username=root
jdbc.password=123456

3. 在 Spring 配置文件中使用引入的外部文件中的值

一个简单的数据源:使用 ${} 调用

<bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close">
    <property name="driverClassName"value="${jdbc.driverClass}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}"/>
    <property name="password"value="${jdbc.password}" />
</bean>

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

 

三、使用时的两点注意事项

1. PropertyPlaceholderConfigurer 默认在指定的 properties 文件中找不到你需要的属性,它还会在 Java 的 System 类属性中查找。

我们可以通过如下方法给 Spring 配置文件传递参数

System.setProperty(key, value);

这种默认行为也可以通过 systemPropertiesModeName 或者 systemPropertiesModel 参数来改变。

PropertyPlaceholderConfigurer 类为我们提供了三种模式。

  • SYSTEM_PROPERTIES_MODE_NEVER: 只允许在 properties 文件中查找,不允许去System类中查找。
  • SYSTEM_PROPERTIES_MODE_FALLBACK: 默认模式。
  • SYSTEM_PROPERTIES_MODE_OVERRIDE: 优先 System 类中查找,找不到再去 properties 文件中查找,与默认模式正好相反。
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <!-- 优先在System类中查找 -->
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="locations">
        <list>
            <value>classpath*:/jdbc.properties</value>
        </list>
    </property>
</bean>

 

2. Spring2.5 以后,引入了简化的引入外部文件的方式,如下:

<context:property-placeholder location="classpath:db.properties"/>

location 属性定义在 PropertyPlaceholderConfigurer 的祖宗类 PropertiesLoaderSupport 中,并且只有 setter 方法。

转载于:https://www.cnblogs.com/libra0920/p/6169338.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值