我想通过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>
答案 0 :(得分:0)
您的示例不起作用,因为Spring调用属性与Java调用属性的内容不同。基本上,Spring属性位于<property>
标记中,这是PropertyPlaceholderConfigurer
解决的问题。您还可以在@Value
注释中使用属性占位符。无论哪种方式,你都有一个带有${}
占位符的字符串得到解析,可能字符串被转换为正确的类型,并注入到你的bean中。
java.util.Properties
用于解析Spring属性中的占位符,但它们本身不被视为解析。 a.
,b.
或c.properties
中的所有属性都将替换为Spring属性占位符,但PropertyPlaceholderConfigurer
不知道或不关心从这些文件获取的值是否具有其中${}
。
现在,Spring Boot确实解析了其配置文件中的占位符,但它有特殊的作用。它也是一个非常自以为是的图书馆,想要控制你的应用程序的生命周期,并在幕后做很多神奇的事情,所以除了在项目的最初阶段,它很难采用或删除。