zoukankan      html  css  js  c++  java
  • context:propertyplaceholder/元素

    5.10  外在化应用参数的配置

    在开发企业应用期间,或者在将企业应用部署到生产环境时,应用依赖的很多参数信息往往需要调整,比如LDAP连接、RDBMS JDBC连接信息。对这类信息进行外在化管理显得格外重要。PropertyPlaceholderConfigurer和PropertyOverrideConfigurer对象,它们正是担负着外在化配置应用参数的重任。

    本节将结合beanfactorypostprocessordemo项目展开对它们的讨论。

    5.10.1  <context:property-placeholder/>元素

    PropertyPlaceholderConfigurer实现了BeanFactoryPostProcessor接口,它能够对<bean/>中的属性值进行外在化管理。开发者可以提供单独的属性文件来管理相关属性。比如,存在如下属性文件,摘自userinfo.properties。
    db.username=scott
    db.password=tiger

    如下内容摘自propertyplaceholderconfigurer.xml。正常情况下,在userInfo的定义中不会出现${db.username}、${db.password}等类似信息,这里采用PropertyPlaceholderConfigurer管理username和password属性的取值。DI容器实例化userInfo前,PropertyPlaceholderConfigurer会修改userInfo的元数据信息(<bean/>定义),它会用userinfo.properties中db.username对应的scott值替换${db.username}、db.password对应的tiger值替换${db.password}。最终,DI容器在实例化userInfo时,UserInfo便会得到新的属性值,而不是${db.username}、${db.password}等类似信息。

    1. <bean id="propertyPlaceholderConfigurer"   
    2.         class="org.springframework.beans.factory.config.  
    3. PropertyPlaceholderConfigurer">  
    4.     <property name="locations">  
    5.         <list>  
    6.             <value>userinfo.properties</value>  
    7.         </list>  
    8.     </property>  
    9. </bean>  
    10.  
    11. <bean name="userInfo" class="test.UserInfo">  
    12.   <property name="username" value="${db.username}"/>  
    13.   <property name="password" value="${db.password}"/>  
    14. </bean> 

    通过运行并分析PropertyPlaceholderConfigurerDemo示例应用,开发者能够深入理解PropertyPlaceholderConfigurer。为简化PropertyPlaceholderConfigurer的使用,Spring提供了<context:property-placeholder/>元素。下面给出了配置示例,启用它后,开发者便不用配置PropertyPlaceholderConfigurer对象了。

    1. <context:property-placeholder location="userinfo.properties"/> 

    PropertyPlaceholderConfigurer内置的功能非常丰富,如果它未找到${xxx}中定义的xxx键,它还会去JVM系统属性(System.getProperty())和环境变量(System.getenv())中寻找。通过启用systemPropertiesMode和searchSystemEnvironment属性,开发者能够控制这一行为。

    原文地址:http://book.51cto.com/art/201004/193386.htm

  • 相关阅读:
    JAVA_NIO 与Netty框架
    Socket编程
    P3368树状数组2(树状数组//改段求点)
    P3373 树状数组1(树状数组//改点求段)
    树状数组
    P1197 星球大战(并查集+链式向前星)
    P2024 食物链(种类并查集||带权并查集)
    P1111 修复公路(kruscal+并查集)
    P1387 最大正方形+P1736 创意吃鱼法(矩形上的dp+预处理)
    P2330 繁忙的城市(krusal最小生成树)
  • 原文地址:https://www.cnblogs.com/qizhenglong/p/2855921.html
Copyright © 2011-2022 走看看