2008-11-29 30 views
2

我有一个Java对象,在给定XML配置描述(它也需要其他描述,但我现在对XML感兴趣)的情况下能够配置它自己。我想知道是否可以将XML描述直接嵌入到Spring应用程序上下文描述中。我想像的是这样的:直接在Spring应用程序上下文中嵌入XML配置

<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

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 attribitutes可以有一个three values

严格:必须有可用的项目的顶级声明,或者物品必须有xsi:type,并且该物品必须是合法的。

所以,只要你的配置XML有一个模式,并且你正确导入它,这应该工作。

然后,你需要注册使用CustomEditorConfigurer

希望这有助于

0

,那岂不是更清洁,如果你的bean有一个属性,告诉它的配置文件的位置,你的XML一个PropertyEditor,并从类路径(或文件系统上的绝对位置)加载配置?这样,您的Spring配置看起来更干净,并且编辑bean的XML配置更容易,因为它位于单独的文件中。

也许你甚至可以使用Spring应用程序上下文的资源特性来做到这一点。

相关问题