Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring从属性bean引用属性_Java_Spring_Dependency Properties - Fatal编程技术网

Java Spring从属性bean引用属性

Java 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"/>

我创建了一个运行良好的spring配置文件

我的下一步是将用户配置属性与系统属性分开

我已经决定使用bean创建额外的xml文件,这些bean将由用户配置

我很难创建几个这样的逻辑bean来封装真正的类bean将使用的属性:

我在网上找到了一个选择,可以通过以下方式参考礼节:

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>
并在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吗?您可以引用其内部嵌套属性而不使用占位符?是的,您可以执行
我找到了一个似乎更简单的解决方案,所以我在我的帖子上附上了一个答案,谢谢你的帮助