当前位置: 代码迷 >> Web前端 >> 精通Spring 之 注脚【<context:property-placeholder/>】
  详细解决方案

精通Spring 之 注脚【<context:property-placeholder/>】

热度:389   发布时间:2012-08-30 09:55:54.0
精通Spring 之 注解【<context:property-placeholder/>】

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属性,开发者能够控制这一行为。

  相关解决方案