PropertyOverrideConfigurer和PropertyPlaceholderConfigurer有什么区别?

时间:2016-10-17 06:38:25

标签: java xml spring javabeans

在Spring框架中使用PropertyOverrideConfigurerPropertyPlaceholderConfigurer之间有什么区别?我无法在这两个类之间找到任何明显的区别。

1 个答案:

答案 0 :(得分:6)

PropertyOverrideConfigurer:

  

"覆盖bean属性值的属性资源配置器   应用程序上下文定义。它从属性中推送值   将文件放入bean定义中。"

它允许你覆盖bean所采用的一些值,这意味着你可以从属性文件中定义的属性覆盖一些spring bean的值

声明:

<bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
    <property name="location" value="classpath:myproperties.properties" />
</bean>

<bean id="person" class="com.sample.Employee" >
       <property name="name" value="Dugan"/>
       <property name="age" value="50"/>       
</bean> 

<强> myproperties.properties:

person.age=40
person.name=Stanis

所以加载bean时

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

e.getAge() => 40
e.getName() => "Stanis"

PropertyPlaceholderConfigurer

  

针对本地属性和/或系统解析$ {...}占位符   属性和环境变量。

它允许您解析bean定义中的$ {..}占位符,它还会检查值的系统属性。可以使用systemPropertiesMode

控制此行为
  • never(0):从不检查系统属性
  • fallback(1):检查系统属性是否无法解析 指定的属性文件。这是默认设置。
  • override(2):在尝试之前先检查系统属性 指定的属性文件。这允许系统属性覆盖 任何其他财产来源。

配置

<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>

移动&#39; dataSource&#39;属性文件的属性

<强> database.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.username=root
jdbc.password=password



<bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    <property name="location">
        <value>database.properties</value>
    </property>
</bean>

然后用占位符引用它们=&gt;

<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>