将已解析的属性对象注入另一个Bean

时间:2016-07-01 16:33:38

标签: java spring

我想通过XML配置将java.util.Properties对象注入另一个bean。我已经尝试了列出here的解决方案但没有成功,可能是因为在属性解析发生之前注入了bean。有没有办法可以在注入我的班级之前强制解析java.util.Properties对象?

以下是我所拥有的修剪/编辑版本。 PropertiesConsumingClass确实会收到a,b和c属性文件的合并但未解析的属性。

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="properties" ref="allProperties" />
</bean>

<bean id="allProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="propertiesArray">
    <util:list>
      <util:properties location="classpath:a.properties" />
      <util:properties location="classpath:b.properties" />
      <util:properties location="classpath:c.properties" />
    </util:list>
  </property>
</bean>

<bean class="PropertiesConsumingClass">
  <constructor-arg index="0" ref="allProperties" />
</bean>

1 个答案:

答案 0 :(得分:0)

您的示例不起作用,因为Spring调用属性与Java调用属性的内容不同。基本上,Spring属性位于<property>标记中,这是PropertyPlaceholderConfigurer解决的问题。您还可以在@Value注释中使用属性占位符。无论哪种方式,你都有一个带有${}占位符的字符串得到解析,可能字符串被转换为正确的类型,并注入到你的bean中。

java.util.Properties用于解析Spring属性中的占位符,但它们本身不被视为解析。 a.b.c.properties中的所有属性都将替换为Spring属性占位符,但PropertyPlaceholderConfigurer不知道或不关心从这些文件获取的值是否具有其中${}

现在,Spring Boot确实解析了其配置文件中的占位符,但它有特殊的作用。它也是一个非常自以为是的图书馆,想要控制你的应用程序的生命周期,并在幕后做很多神奇的事情,所以除了在项目的最初阶段,它很难采用或删除。