直接在Spring应用程序上下文中嵌入XML配置

时间:2008-11-29 17:58:44

标签: java xml spring configuration

我有一个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部分,但这看起来有点难看。

2 个答案:

答案 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的资源功能来完成此任务。