如何将自定义Spring模式类型与传统的Spring模式类型混合搭配?

时间:2009-09-25 17:31:48

标签: spring xsd

假设我有一个类Person,其属性为nameage,并且可以使用Spring进行配置:

<beans:bean id="person" class="com.mycompany.Person">
  <beans:property name="name" value="Mike"/>
  <beans:property name="age" value="38"/>
</beans:bean>

我希望有一个自定义的Spring架构元素,这很容易做到,允许我在Spring配置文件中使用它:

<Person name="Mike" age="38"/>

架构定义如下所示:

<xsd:complexType name="Person">
  <xsd:complexContent>
    <xsd:extension base="beans:identifiedType">
      <xsd:attribute name="name" type="xsd:string"/>
      <xsd:attribute name="age" type="xsd:int"/>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

基于此,我们现在说我想选择将我的自定义架构元素与Spring bean的传统元素和属性混合和匹配,所以我可以选择这样做:

<Person name="Mike">
  <beans:property name="age" value="38"/>
</Person>

我该怎么做呢?如果没有一些主要的定制,也许这是不可能的,但我希望有一些相当简单的机制来实现这一目标。我认为扩展“bean”可能是诀窍,但这看起来并不正确。

1 个答案:

答案 0 :(得分:1)

首先,如果你的例子真的你想要做的一切,那么考虑改用p-namespace来节省一些主要的头痛:

<beans:bean id="person" class="com.mycompany.Person" p:name="Mike" p:age="38"/>

是的,它看起来不像<Person name= age= />那么漂亮,但没有自定义代码可写: - )

如果这不满足您的要求,那么您正在考虑实现自己的命名空间/ bean定义解析器。 Spring文档有一个chapter dedicated to that,它会更好地解释它。如果您遇到任何问题,请回复具体问题,我会尽力提供帮助。