我有一个Java对象,它能够在给定XML配置描述的情况下自行配置(它还需要其他描述,但我现在对XML很感兴趣)。我想知道我是否可以将XML描述直接嵌入到Spring应用程序上下文描述中。我想象的是:
<bean id="myXMLConfiguredBean" class="com.example.Foo">
<constructor-arg type="xml">
<myconfig xmlns="http://example.com/foo/config">
<bar>42</bar>
</myconfig>
</constructor-arg>
</bean>
但我不知道是否可能 - 或类似的东西 - 是可能的。我意识到我可以将myconfig嵌入CDATA部分,但这看起来有点难看。
答案 0 :(得分:2)
Spring的XSD允许<constructor-arg>
通过以下方式包含任何XML:
<xsd:element name="constructor-arg">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="description" minOccurs="0" />
<xsd:choice minOccurs="0" maxOccurs="1">
<xsd:element ref="bean" />
<xsd:element ref="ref" />
<xsd:element ref="idref" />
<xsd:element ref="value" />
<xsd:element ref="null" />
<xsd:element ref="list" />
<xsd:element ref="set" />
<xsd:element ref="map" />
<xsd:element ref="props" />
<!-- Any XML -->
<xsd:any namespace="##other" processContents="strict" />
</xsd:choice>
</xsd:sequence>
...
</xsd:complexType>
</xsd:element>
processContents
代理人可以拥有three values
严格:必须有可用项目的顶级声明,或者该项目必须有
xsi:type
,并且该项目必须是·有效的。“
因此,只要您的配置XML具有架构,并且您正确导入它,这应该可以。
然后,您需要使用PropertyEditor
为您的XML注册CustomEditorConfigurer希望这有帮助
答案 1 :(得分:0)
如果你的bean有一个属性告诉它配置文件的位置,并且它从类路径(或文件系统上的绝对位置)加载配置,那会不会更清晰?这样,您的Spring配置看起来更干净,并且更容易编辑bean的XML配置,因为它位于单独的文件中。
也许您甚至可以使用Spring Application Context的资源功能来完成此任务。