【发布时间】:2012-12-24 23:34:41
【问题描述】:
我已经创建了一个运行良好的spring配置文件。
我的下一步是将用户配置属性与系统属性分开。
我决定使用将由用户配置的 bean 创建额外的 xml 文件。
我在创建几个这样的逻辑 bean 来封装真正的类 bean 将使用的属性时遇到了问题:
我在网上找到了一个以这种方式引用礼仪的选项:
UserConf.xml
<bean id="numberGuess" class="x...">
<property name="randomNumber" value="5"/>
<!-- other properties -->
</bean>
SystemConf.xml
<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一样使用平面配置文件,使用工厂加载。
Solution3 是使用 Spring Property Placeholder 配置从 XML 属性文件(例如example)加载属性,但是这里我根本不知道如何获得更复杂的属性嵌套结构(属性需要用不同的逻辑名隔开,例如 minNumber 会在 xAlgo 和 y algo 下都定义)。
我不喜欢创建新的 Java 类只是为了处理这个问题或将我的用户配置移动到平面 props 文件(我需要 xml 结构),他们还有其他解决方案吗??
【问题讨论】:
-
“x”类的属性会用到哪里?
-
抱歉,我不清楚为什么你不能只使用属性文件?
-
@cowls: 在 SystemConf 文件的不同 bean 中,
-
@Tom McIntyre:我只给出了一个简单的属性示例,我的部分属性和 bean 可能并且将会具有复杂的 XML 结构
-
@cowls:我已经添加了解决方案 3,如果我能够将属性分离到不同的逻辑部分,则更可取
标签: java spring dependency-properties