Java Spring从属性bean引用属性
我创建了一个运行良好的spring配置文件 我的下一步是将用户配置属性与系统属性分开 我已经决定使用bean创建额外的xml文件,这些bean将由用户配置 我很难创建几个这样的逻辑bean来封装真正的类bean将使用的属性: 我在网上找到了一个选择,可以通过以下方式参考礼节: UserConf.xmlJava Spring从属性bean引用属性,java,spring,dependency-properties,Java,Spring,Dependency Properties,我创建了一个运行良好的spring配置文件 我的下一步是将用户配置属性与系统属性分开 我已经决定使用bean创建额外的xml文件,这些bean将由用户配置 我很难创建几个这样的逻辑bean来封装真正的类bean将使用的属性: 我在网上找到了一个选择,可以通过以下方式参考礼节: UserConf.xml <bean id="numberGuess" class="x..."> <property name="randomNumber" value="5"/>
<bean id="numberGuess" class="x...">
<property name="randomNumber" value="5"/>
<!-- other properties -->
</bean>
<bean id="numberGuess" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties">
<props>
<prop key="randomNumber">3</prop>
<!-- other properties -->
</bean>
并在spring系统配置中添加一个bean父级:
<bean id="MyProps" class="path to MyProps"/>
在用户端,将前一个bean更改为:
<bean id="numberGuess" parent="MyProps">
<property name="randomNumber" value="5"/>
<!-- other properties -->
</bean>
解决方案2使用与Database.props一样的平面配置文件,并使用factory加载
解决方案3是使用Spring属性占位符配置从XML属性文件加载属性(例如),但在这里,我不知道如何获得更复杂的属性嵌套结构(属性需要用不同的逻辑名称分隔,例如,minNumber将在xAlgo和y algo下定义)
我不喜欢创建新的Java类只是为了解决这个问题,或者将我的用户配置移动到一个平面道具文件(我需要xml结构),他们还有其他解决方案吗???首先,如果你不知道,你应该看一下。另外,
@Value(${some.property:defaultvalue}”)
是您应该查看的内容
第二,在Spring中,“配置”一词是不明确的。Spring使用这个词,但他们的意思是开发人员配置,而不是用户配置。不管人们怎么说,Spring并不是一个配置引擎
我不确定您想做什么,但您应该知道,您的配置不会在运行时进行调整,这是“用户”配置等经常需要的。因此,大多数人编写自己的配置层
您应该注意的另一件事是不使用XML配置,而是使用XML配置,这将为您提供更大的灵活性。我将回答我自己的问题,因为它看起来是我的最佳解决方案(而且比建议的要简单得多) 我将使用PropertiesFactoryBean为我完成以下工作: e、 g UserConf.xml
<bean id="numberGuess" class="x...">
<property name="randomNumber" value="5"/>
<!-- other properties -->
</bean>
<bean id="numberGuess" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties">
<props>
<prop key="randomNumber">3</prop>
<!-- other properties -->
</bean>
3.
SystemConf.xml
<import resource="UserConf.xml" />
<bean id="shapeGuess" class="y...">
<property name="initialShapeSeed" value="#{ numberGuess.randomNumber }"/>
<!-- other properties -->
</bean>
<import resource="UserConf.xml" />
<bean id="shapeGuess" class="y...">
<property name="initialShapeSeed" value="#{ numberGuess.randomNumber }"/>
<!-- other properties -->
</bean>
在哪里使用“x”类中的属性?抱歉,我不清楚为什么不能只使用属性文件?@cowls:在SystemConf文件的不同bean中,@Tom McIntyre:我只给出了一个简单的属性示例,我的部分属性和bean可能会使用复杂的XMLstructure@cowls:我已经添加了解决方案3,如果我能够将属性分离到不同的逻辑部分,这是更好的选择。我熟悉Spring的配置方面,web上的大多数链接都是用于使用props平面文件,我需要并举例说明property place holder如何使用复杂的xml属性,类似于此链接,但使用逻辑上分离的属性块,您可以提供一个示例或链接吗?当配置变得复杂(即嵌套)时,我使用Jackson或JAXB将配置文件反序列化为数据POJO,如MyProps。如果JSON或XML文件被配置为属性(系统属性或环境…等等)。没有其他解决方法吗?没有可以用XML定义的默认bean吗?您可以引用其内部嵌套属性而不使用占位符?是的,您可以执行我找到了一个似乎更简单的解决方案,所以我在我的帖子上附上了一个答案,谢谢你的帮助