我创建了一个运行良好的弹簧配置文件。
我的下一步是将用户配置属性与系统属性分开。
我决定使用将由用户配置的 bean 创建额外的 xml 文件。
我在创建几个这样的逻辑 bean 封装将由真实类 bean 使用的属性时遇到了问题:
我在网上找到了一个以这种方式引用属性的选项:
用户配置文件
<bean id="numberGuess" class="x...">
<property name="randomNumber" value="5"/>
<!-- other properties -->
</bean>
系统配置文件
<import resource="UserConf.xml" />
<bean id="shapeGuess" class="y...">
<property name="initialShapeSeed" value="#{ numberGuess.randomNumber }"/>
<!-- other properties -->
</bean>
但我的问题是我需要x...
类是逻辑的东西,根本不应该被初始化,而且我不希望它泄露系统类层次结构的任何信息,因为它应该只在使用配置 xml 文件中。
解决方案1 是创建一个表示此属性的 Java 对象:
public class MyProps(...)
并在spring系统配置中添加一个bean parent:
<bean id="MyProps" class="path to MyProps"/>
在用户端将以前的 bean 更改为:
<bean id="numberGuess" parent="MyProps">
<property name="randomNumber" value="5"/>
<!-- other properties -->
</bean>
解决方案2是像Database.props一样使用平面配置文件,并使用工厂加载它。
解决方案3是使用Spring Property Placeholder配置从XML属性文件加载属性(例如example),但是这里我根本不知道如何获得更复杂的属性嵌套结构(属性需要用不同的逻辑名称分隔,例如minNumber 将在 xAlgo 和 y 算法下定义)。
我不喜欢创建新的 Java 类只是为了处理这个问题或将我的用户配置移动到平面道具文件(我需要 xml 结构),他们还有其他解决方案吗?