zoukankan      html  css  js  c++  java
  • PropertyPlaceholderConfigurer

    转:

    http://blog.csdn.net/sz_bdqn/article/details/6666262

     

    要了解这个类首先要弄清楚一个概念:bean factory post-processor
    官方解释是这样的:
    A bean factory post-processor is a java class which implements the
    org.springframework.beans.factory.config.BeanFactoryPostProcessor interface. It is executed manually (in the case of the BeanFactory) or automatically (in the case of the ApplicationContext) to apply changes of some sort to an entire BeanFactory, after it has been constructed.
    我理解的意思是这样的:
    1.首先bean factory post-processor实现了org.springframework.beans.factory.config.BeanFactoryPostProcessor接口。
    2.在BeanFactory的情况下它被手动的执行。
    3.在ApplicationContext的条件下它会自动的执行。
    4.最关键的一点是,是在一个类的实例被构造出来之后,对整个BeanFactory进行修改。

     

    spring属性占位符PropertyPlaceholderConfigurer的使用

    1、一个简单的Demo

    1.1、创建conf.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
        <bean id="propertyConfigurer"  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <!-- 
            使用location属性定义单个配置文件
            <property name="location">
                <value>classpath:/com/zsw/config/jdbc.properties</value>
            </property>
             -->
      
      <!-- 使用locations属性定义多个配置文件 -->
      <property name="locations">
         <list>
            <value>classpath:/com/zsw/config/jdbc.properties</value>
         </list>
      </property> 
        </bean>
        <bean id="dataSource"  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="url">
                <value>${database.url}</value>
            </property>
            <property name="driverClassName">
                <value>${database.driver}</value>
            </property>
            <property name="username">
                <value>${database.user}</value>
            </property>
            <property name="password">
                <value>${database.password}</value>
            </property>
        </bean>
    </beans>

    1.2.创建jdbc.properties文件

    database.driver=com.mysql.jdbc.Driver
    database.url=jdbc:mysql://localhost:3306/right?useUnicode=true&autoReconnect=true&characterEncoding=UTF-8
    database.user=root
    database.password=root
    jdbc.pool.c3p0.acquire_increment=2
    jdbc.pool.c3p0.max_size=20
    jdbc.pool.c3p0.min_size=2
    jdbc.pool.c3p0.preferred_test_query='SELECT 1'
    jdbc.pool.c3p0.idle_connection_test_period=18000
    jdbc.pool.c3p0.max_idle_time=25000

    1.3.创建Config.Java

    package com.zsw.config;
    import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.jdbc.datasource.DriverManagerDataSource;

    public class Config {
         public static void main(String[] args) {
             XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource("src/com/zsw/config/conf.xml"));
             // 如果要在BeanFactory中使用,bean factory post-processor必须手动运行:
             PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer();
             cfg.setLocation(new FileSystemResource("src/com/zsw/config/jdbc.properties"));
             cfg.postProcessBeanFactory(factory);
             DriverManagerDataSource dataSource = (DriverManagerDataSource) factory.getBean("dataSource");
    //         System.out.println(dataSource.getDriverClassName());
             
             
             System.out.println(dataSource.getUsername());
             // 注意,ApplicationContext能够自动辨认和应用在其上部署的实现了BeanFactoryPostProcessor的bean。这就意味着,当使用ApplicationContext的时候应用PropertyPlaceholderConfigurer会非常的方便。由于这个原因,建议想要使用这个或者其他bean
             // factory postprocessor的用户使用ApplicationContext代替BeanFactroy。
             ApplicationContext context = new ClassPathXmlApplicationContext("com/zsw/config/conf.xml");
             DriverManagerDataSource dataSource2 = (DriverManagerDataSource) context.getBean("dataSource");
             System.out.println(dataSource2.getUsername());
         }
     
    }

    2.Spring中PropertyPlaceholderConfigurer多种配置方式

    2.1配置单个Properties文件

    <bean id="propertyConfigurerForAnalysis" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location">
            <value>classpath:/spring/include/dbQuery.properties</value>
        </property>
    </bean>

    其中classpath是引用src目录下的文件写法。

    2.2 当存在多个Properties文件时,配置就需使用locations了:

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">     <property name="locations">        <list>           <value>classpath:/spring/include/jdbc-parms.properties</value>           <value>classpath:/spring/include/base-config.properties</value>         </list>     </property> </bean>

    2.3、接下来我们要使用多个PropertyPlaceholderConfigurer来分散配置,达到整合多工程下的多个分散的Properties 文件,其配置如下:

    <bean id="propertyConfigurerForProject1" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="order" value="1" />
        <property name="ignoreUnresolvablePlaceholders" value="true" />
        <property name="location">
           <value>classpath:/spring/include/dbQuery.properties</value>
        </property>
    </bean>
    <bean id="propertyConfigurerForProject2" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="order" value="2" />
        <property name="ignoreUnresolvablePlaceholders" value="true" />
        <property name="locations">
          <list>
            <value>classpath:/spring/include/jdbc-parms.properties</value>
            <value>classpath:/spring/include/base-config.properties</value>
          </list>
        </property>
    </bean>

    其中order属性代表其加载顺序,而ignoreUnresolvablePlaceholders为是否忽略不可解析的 Placeholder,如配置了多个PropertyPlaceholderConfigurer,则需设置为true

  • 相关阅读:
    tomcat发布的class中有一部分类会生成同名的XXX$1.class
    报错:The method encodeBase64String(byte[]) is undefined for the type Base64
    bootstrap中的fileInput上传文件时,文件名称中有-(中划线)改为了_下划线
    java中去html/jsp等前台页面&nbsp;造成的空格
    # 50 个最常被问到的 Selenium 面试问题和答案
    # 为什么测试人员学习测试自动化(仍然)如此困难
    # 如何引进高级的 IT 自动化项目:一个 3 步走计划
    **Selenium IDE、Selenium RC 和 WebDriver 之间有什么区别?**
    pandas 数据分析好的博文
    pandas contains 函数
  • 原文地址:https://www.cnblogs.com/binnzhao/p/6941277.html
Copyright © 2011-2022 走看看