[英]Inject Resolved Properties Object to Another Bean
我想通过XML配置将java.util.Properties
对象注入另一个bean。 我已经尝试过这里列出的解决方案但没有成功,大概是因为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>
您的示例不起作用,因为Spring调用属性与Java调用属性不同。 基本上,Spring属性存在于<property>
标记中,这是PropertyPlaceholderConfigurer
解决的问题。 您还可以在@Value
注释中使用属性占位符。 无论哪种方式,你都有一个带有${}
占位符的字符串得到解析,可能字符串被转换为正确的类型,并注入到你的bean中。
java.util.Properties
用于解析Spring属性中的占位符,但不考虑它们本身的解析。 a中的任何属性a.
, b.
或者c.properties
将被替换为Spring属性占位符,但是PropertyPlaceholderConfigurer
不知道或不关心它从这些文件中获取的值是否包含${}
。
现在, Spring Boot确实解决了其配置文件中的占位符,但它有特殊的作用。 它也是一个非常自以为是的图书馆,想要控制你的应用程序的生命周期并在幕后做很多神奇的事情,所以除了在项目的最初阶段,它很难采用或删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.