2009-09-25 5 views
4

Disons que j'ai une classe Person avec des propriétés name et age, et il peut être configuré avec le printemps comme ceci:Comment puis-je mélanger et faire correspondre des types de schéma Spring personnalisés avec des types de schémas Spring traditionnels?

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

Je voudrais avoir un élément de schéma ressort personnalisé pour elle, qui est facile à ne, me permettant d'avoir dans mon fichier de configuration Spring:

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

La définition de schéma ressemblerait à quelque chose comme ceci:

<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> 

Sur cette base, disons maintenant, je voudrais la possibilité de mélanger et assortir mon élément de schéma personnalisé avec des éléments traditionnels et les attributs des haricots de printemps, que je puisse avoir la possibilité de le faire:

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

Comment est-ce que j'irais faire ça? Cela est peut-être impossible sans une personnalisation majeure, mais j'espère qu'il existe un mécanisme assez simple pour y parvenir. Je pensais que l'extension de "haricot" pourrait être l'astuce, mais cela ne semble pas être correct.

Répondre

1

d'abord, si votre exemple est vraiment tout ce que vous voulez faire, utilisez p-namespace à la place et vous épargner un véritable casse-tête:

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

Oui, il ne semble pas aussi jolie que <Person name= age= /> mais Il n'y a pas de code personnalisé à écrire :-)

Si cela ne répond pas à vos exigences, vous cherchez à implémenter votre propre analyseur de définition d'espace de nom/bean. La documentation de ressort a un chapter dedicated to that qui l'expliquera mieux alors que je peux. Si vous rencontrez des problèmes, s'il vous plaît postez des questions spécifiques et je vais essayer de vous aider.

+0

Merci. J'ai écrit mon propre analyseur de définition de bean personnalisé et c'était en fait assez facile. Maintenant, j'essaie de le configurer pour que mes définitions de beans personnalisées puissent éventuellement contenir des éléments de définition de bean "normaux" imbriqués comme dans mon exemple ci-dessus. L'idée est que je peux choisir de créer des personnalisations pour les attributs les plus communs d'un haricot, mais en laisser les moins communs aux éléments traditionnels du printemps. – SingleShot

+1

Un problème avec cette approche est que vous ne pouvez pas écrire votre XSD facilement. L'extension 'beans: identifyType' ne définit pas les éléments imbriqués; ils sont définis dans le groupe 'beanElements' qui ne peut pas être référencé de l'extérieur; vous devrez donc lister manuellement 'property' et tout ce que vous voulez dans votre XSD. Autre que cela, les éléments imbriqués devraient être manipulés pour vous automatiquement; jetez un oeil à l'espace de noms util de Spring et à ses gestionnaires/parseurs; celui de Map en particulier. – ChssPly76

+0

@SingleShot des mises à jour/progrès sur votre analyseur de définition de bean personnalisé? – onejigtwojig

Questions connexes