`

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

分享到:
评论

相关推荐

    SSH笔记-通过property-placeholder使用外部属性文件

    在Spring框架中,`&lt;context:property-placeholder&gt;`是用于加载和解析属性文件的一个标签,它允许我们在XML配置或Java配置中使用占位符 `${...}` 来引用属性文件中的值。这样做的好处是,我们可以将敏感信息如数据库...

    spring_MVC源码

    15. &lt;context:property-placeholder location="classpath:/hibernate.properties" /&gt; 16. 17. &lt;bean id="sessionFactory" 18. class="org.springframework.orm.hibernate3.annotation....

    集成springmvc spring hibernate的配置

    &lt;context:property-placeholder location="classpath:jdbc.properties"/&gt; &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt; &lt;property name="driverClassName" ...

    spring-framework-3.2.0.RC2-schema.zip

    `context`命名空间下的 `&lt;context:component-scan&gt;`、`&lt;context:property-placeholder&gt;`等元素,用于扫描组件、加载外部属性文件,增强了Spring的应用范围和灵活性。 "cache"模块则提供了缓存抽象,支持如 EhCache...

    17 Spring IoC容器如何读取多个属性文件或者配置文件?慕课专栏(1)1

    在Spring的老版本中,通常使用`&lt;context:property-placeholder&gt;`或`&lt;util:properties&gt;`元素来加载属性文件。例如: ```xml &lt;!-- 使用 context:property-placeholder --&gt; &lt;beans xmlns=...

    spring与mybatis整合配置文档

    这里通过`&lt;context:property-placeholder&gt;`加载了`dbconfig.properties`中的配置项,确保了数据库连接参数的外部化管理。 ```xml &lt;context:property-placeholder location="classpath:dbconfig.properties"/&gt; ...

    OA项目SSH整合框架

    &lt;context:property-placeholder location="classpath:jdbc.properties" /&gt; &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt; &lt;property name=...

    ssm 框架配置

    &lt;context:property-placeholder location="classpath:db.properties"/&gt; &lt;!-- 配置数据源 --&gt; &lt;bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"&gt; &lt;property name="driverClassName" value...

    第十章 Spring 配置元信息(Configuration Metadata)1

    7. **基于Properties和YAML文件装载外部化配置**:`&lt;context:property-placeholder&gt;`和`&lt;context:property-override&gt;`用于加载和覆盖属性值,而YAML文件提供了更友好的格式来组织配置数据。 8. **基于Extensible ...

    引入多个properties时.txt

    在`applicationContext.xml`中通过`&lt;context:property-placeholder&gt;`标签来指定`properties`文件的位置。例如,我们需要引入两个文件:`jdbc.properties`和`res.properties`,可以这样配置: ```xml &lt;!-- 引入 jdbc...

    Spring中property-placeholder的使用与解析详解

    例如,在 `&lt;context:property-placeholder&gt;` 中,ContextNamespaceHandler 将解析 `location` 属性,并将其转换为 PropertySourcesPlaceholderConfigurer BeanDefinition 对象。 BeanDefinitionParser 解析 bean ...

    spring3.x的读书笔记-7-1

    4. **配置JdbcTemplate**: 要使用`JdbcTemplate`,首先需要配置数据源(`DataSource`),这可以通过`&lt;context:property-placeholder&gt;`和`&lt;bean&gt;`元素完成。数据源配置包括数据库连接的URL、用户名、密码等信息。接着...

    Spring 3.1配置文件示例(备忘)

    例如,通过 `&lt;context:property-placeholder&gt;` 可以加载属性文件: ```xml &lt;context:property-placeholder location="classpath:database.properties"/&gt; ``` 综上所述,`applicationContext.xml` 在 Spring 3.1 中...

    spring约束

    3. ** Context `.xsd`**:扩展了基本的Bean配置,引入了上下文相关的功能,如`&lt;context:component-scan&gt;`用于自动发现和注册bean,以及`&lt;context:property-placeholder&gt;`用于处理属性占位符。 4. ** JDBC `.xsd`**...

    SSM框架笔记

    - `&lt;context:property-placeholder&gt;`: 引用外部属性文件。 - `&lt;mvc:resources&gt;`: 配置静态资源路径。 - `&lt;tx:advice&gt;`: 配置事务通知。 - `&lt;tx:annotation-driven&gt;`: 开启基于注解的事务管理。 - `&lt;tx:jta-...

    spring3.0的xsd文件.rar

    此外,`&lt;context:property-placeholder&gt;`则可以用来加载属性文件,方便在配置中引用环境变量。 Spring 3.0引入了AOP(Aspect-Oriented Programming,面向切面编程)的增强,`aop.xsd`定义了与切面相关的配置元素,...

    Mybatis 多数据源配置说明.docx

    &lt;context:property-placeholder location="classpath:config/jdbc.properties"/&gt; &lt;!-- 配置第一个数据源 --&gt; &lt;bean name="dataSource" class=...

    spring3.0 xsd文件

    8. `&lt;context:property-placeholder&gt;`:加载属性文件,使你可以在配置中使用占位符 `${...}`。 9. `&lt;import&gt;`:引入其他XML配置文件,允许配置模块化。 10. `&lt;bean&gt;`的`init-method`和`destroy-method`属性:指定...

    ssm整合以及相关练习文档

    &lt;context:property-placeholder location="classpath:jdbc.properties"/&gt; &lt;!-- 配置数据源 --&gt; &lt;bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"&gt; &lt;property name="driverClassName" ...

Global site tag (gtag.js) - Google Analytics