PropertyOverrideConfigurer 和 PropertyPlaceholderConfigurer 的区别

博客介绍了两种属性配置工具的区别,包括功能、属性源和工作模式。一种是解析处理占位符,属性源多样,工作模式为“拉”;另一种基于属性文件设置属性值,属性源为指定路径文件,工作模式为“推”,还给出了相应例子演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

区别描述

  • PropertyPlaceholderConfigurer

    • 功能 : 解析和处理bean定义中属性值,构造函数参数值,和@Value注解中的占位符${...}
    • 属性源 : 所设置的Properties属性对象,属性文件,系统属性(system properties),环境变量(environment variables)
    • 工作模式 : “拉”,遍历每个bean定义中的属性占位符,从属性源中拉取对应的属性值替换属性占位符

    Spring 3.1 开始,推荐使用PropertySourcesPlaceholderConfigurer而不是PropertyPlaceholderConfigurer

  • PropertyOverrideConfigurer

    • 功能 : 基于属性文件定义的bean属性值设置指令执行相应的bean属性值设置
    • 属性源 : 指定路径的属性文件
    • 工作模式: “推”,根据属性文件中的bean属性设置指令将属性值推送设置到相应的bean属性

例子演示

1. PropertyPlaceholderConfigurer例子

  1. 提供一个配置文件,比如为 database.properties :
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.username=root
jdbc.password=password
  1. 定义bean PropertyPlaceholderConfigurer 如下 :
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>database.properties</value>
    </property>
</bean>
  1. 然后定义bean dataSource如下 :
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
</bean>

经过上面三个步骤,bean dataSource定义效果同下 :

<bean id="dataSource"  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/mydb" />
        <property name="username" value="root" />
        <property name="password" value="password" />
        <property name="systemPropertiesMode" value="0" />
</bean>

2. PropertyOverrideConfigurer例子

  1. 提供一个配置文件,比如为 myproperties.properties :
person.age=40
person.name=Stanis
  1. 定义bean PropertyOverrideConfigurer 如下 :
<bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
    <property name="location" value="classpath:myproperties.properties" />
</bean>
  1. 然后定义bean person如下 :
<bean id="person" class="com.sample.Employee" >
       <property name="name" value="Dugan"/>
       <property name="age" value="50"/>       
</bean> 

经过上述三个步骤,当我们在程序中访问bean person的属性时会有如下结果 :


Employee e  = (Employee)context.getBean(Employee.class);

e.getAge() // 这里会对应属性文件 myproperties.properties 中的属性值 40
e.getName() // => 这里会对应属性文件 myproperties.properties 中的属性值 "Stanis"

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值