Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring Property PlaceHolder配置器注入的值错误_Java_Spring - Fatal编程技术网

Java 使用Spring Property PlaceHolder配置器注入的值错误

Java 使用Spring Property PlaceHolder配置器注入的值错误,java,spring,Java,Spring,我有两个属性文件: prop1.properties: prop1.sample=value123 及 当我在我的“InjectValues”bean中注入这些属性值时,一切都以正确的方式工作。但是,当我想将一个值从一个PropertyPlaceHolder注入到另一个类,该类只是扩展了PropertyPlaceHolder,而不是value时,就会插入密钥,如下所示 <bean id="propertyConfigurer" class="org.springframework

我有两个属性文件:

prop1.properties:
prop1.sample=value123

当我在我的“InjectValues”bean中注入这些属性值时,一切都以正确的方式工作。但是,当我想将一个值从一个PropertyPlaceHolder注入到另一个类,该类只是扩展了PropertyPlaceHolder,而不是value时,就会插入密钥,如下所示

<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>file:C:\test\prop1.properties</value>
    </property>
    <property name="placeholderPrefix" value="${" />
    <property name="placeholderSuffix" value="}" />
</bean>

<bean id="propertyConfigurerNew"
    class="com.test.spring.property.EncryptedPlaceHolder">
    <property name="location">
        <value>file:C:\test\prop2.properties</value>
    </property>
    <property name="key" value="${prop1.sample}" /> <!-- Value "${prop1.sample}" is injected instead of value123 -->
    <property name="placeholderPrefix" value="#[" />
    <property name="placeholderSuffix" value="]" />
</bean>

<bean id="injectValues"
    class="com.test.spring.property.InjectValues">
    <property name="value1" value="${prop1.sample}" /> <!-- Correct value "value123" is injected -->
    <property name="value2" value="#[prop2.sample]" /> <!-- Correct value "value234" is injected -->
</bean>

文件:C:\test\prop1.properties
文件:C:\test\prop2.properties

看起来PropertyPlaceHolders无法替换其他PropertyPlaceHolders中的占位符,因为这些占位符是在注释中提到的相同阶段执行的。

PropertyPlaceHolders不会替换其他PropertyPlaceHolders中的占位符。它们不是按顺序操作的,并且都在同一阶段执行(并且在此之前都已构建)。因此,它根本不起作用。我是否可以强制容器将一个PropertyPlaceHolder执行移动到另一个阶段?属性占位符是一个
BeanFactoryPostProcessor
,它在预先确定的时间执行。您可以通过完全加载上下文、添加bean定义并重新加载上下文来绕过它,但这会非常麻烦。谢谢您的澄清!
<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>file:C:\test\prop1.properties</value>
    </property>
    <property name="placeholderPrefix" value="${" />
    <property name="placeholderSuffix" value="}" />
</bean>

<bean id="propertyConfigurerNew"
    class="com.test.spring.property.EncryptedPlaceHolder">
    <property name="location">
        <value>file:C:\test\prop2.properties</value>
    </property>
    <property name="key" value="${prop1.sample}" /> <!-- Value "${prop1.sample}" is injected instead of value123 -->
    <property name="placeholderPrefix" value="#[" />
    <property name="placeholderSuffix" value="]" />
</bean>

<bean id="injectValues"
    class="com.test.spring.property.InjectValues">
    <property name="value1" value="${prop1.sample}" /> <!-- Correct value "value123" is injected -->
    <property name="value2" value="#[prop2.sample]" /> <!-- Correct value "value234" is injected -->
</bean>