0

我的任务是相对简单的口味,但我被困在这一点上。我的问题是

这两种语法是否相等?

一个

<context:property-placeholder location="classpath:application.properties" system-properties-mode="OVERRIDE"/> 

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:application.properties"/>
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
</bean>

应用上下文

<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.1.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-3.1.xsd"
>

结果就在这里

 https://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
4

2 回答 2

2

在 Spring 3.1 版本中(在您的 xml 模式中引用)它们并不完全相等

context:property-placeholder将定义一个实例,PropertySourcesPlaceholderConfigurer 而您已经PropertyPlaceHolderConfigurer用 bean 声明声明了一个实例。

这就是为什么有时使用标签而不是直接 bean 声明是合理的(即定义做什么而不是如何完成)。

从 PropertySourcesPlaceholderConfigurer javadoc:

从 Spring 3.1 开始,PropertySourcesPlaceholderConfigurer 应优先于此实现使用;通过利用 Spring 3.1 中提供的 Environment 和 PropertySource 机制,它更加灵活。

在 Spring 3.1 之前,命名空间元素注册了一个 PropertyPlaceholderConfigurer 实例。如果使用命名空间的 spring-context-3.0.xsd 定义,它仍然会这样做。也就是说,您可以通过命名空间保留 PropertyPlaceholderConfigurer 的注册,即使使用 Spring 3.1;只需不要更新您的 xsi:schemaLocation 并继续使用 3.0 XSD。

于 2013-01-29T09:35:31.647 回答
0

是的,它们是一样的。

根据上下文命名空间文档

“OVERRIDE”表示应首先针对系统​​属性解析占位符,然后针对任何本地属性解析

根据PropertyPlaceholderConfigurer

首先检查系统属性,然后再尝试指定的属性。这允许系统属性覆盖任何其他属性源。

于 2013-01-29T09:28:05.960 回答