gpt4 book ai didi

java - 将解析的属性对象注入(inject)到另一个 Bean

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:20 24 4
gpt4 key购买 nike

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

下面是我所拥有的内容的修剪/编辑版本。 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 内使用属性占位符注释。无论哪种方式,你都会有一个带有 ${} 的字符串。得到解析的占位符,可能会将字符串转换为正确的类型,并注入(inject)到您的 bean 中。

java.util.Properties用于解析 Spring 属性中的占位符,但它们本身不被考虑用于解析。 a. 中的任何特性, b. ,或c.properties将被替换为 Spring 属性占位符,但是 PropertyPlaceholderConfigurer不知道也不关心从这些文件中获取的值是否有 ${}在他们之中。

现在,Spring Boot确实解析其配置文件中的占位符,但它有特殊的酱汁来实现这一点。它也是一个非常固执己见的库,想要控制应用程序的生命周期,并在幕后做很多神奇的事情,因此除非在项目一开始,否则很难采用或放弃。

关于java - 将解析的属性对象注入(inject)到另一个 Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38150210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com