0

我对以下spring上下文配置文件有疑问:

...
   <context:property-override location="classpath:query_1.properties" />
        <bean
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations" value="classpath:query_2.properties" />
        </bean>
....

问题是找不到文件“query_2.properties”中的属性。我得到的例外是他跟随一个:

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException. Could not resolve placeholder...

现在我的问题是:context:property-override 和 PropertyPlaceholderConfigurer 的组合是否没有意义?谁能用简单的话解释一下两者之间有什么区别?任何帮助,将不胜感激。

谢谢。贺拉斯

4

1 回答 1

3

属性占位符,通常使用 a 定义,<context:property-placeholder location=../>解析 bean 定义中的占位符:

例如。

<bean name="myclass" class="MyClass">
    <property name="prop1" value="${prop1val}/>
</bean>

如果使用属性占位符指定的位置具有名称为 prop1val 的属性:

prop1val=aval

然后它将在 bean 中替换myclass

使用另一个定义的 PrpertyOverrideConfigurer<context:property-override location="classpath:query_1.properties" />就像一个推送机制,属性是表单beanname.property,它会将该属性推送到具有 name 的 bean 中beanname

例如。对于上述情况,如果该位置具有以下属性:

myclass.prop1=aval

prop1然后它会注入myclassbean

您得到的异常只是表明它无法找到query_2.properties文件,我怀疑它是否是任何其他配置问题。

如果两者都定义了,哪个将生效,我认为最后一个将生效。

于 2012-08-17T17:32:29.913 回答