4 votes

Comment fonctionne l'espace de noms contextuel de Spring ?

Par exemple, si je déclare dans mon application-context.xml :

<context:annotation-config/>

J'ai lu dans le documentation officielle :

Les post-processeurs implicitement enregistrés sont les suivants AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor, PersistenceAnnotationBeanPostProcessor, ainsi que le post-processeur susmentionné RequiredAnnotationBeanPostProcessor.

Mais je me demandais comment Spring fait ce travail sous le capot, je penserais que ce 1-liner est converti en plusieurs définitions de bean pour les post-processeurs mentionnés par la documentation.

Cependant, ma question est la suivante : quel composant/classe de Spring implémente cette fonction ? conversion de la définition d'une ligne à une définition de plusieurs haricots". la fonctionnalité ?

5voto

gkamal Points 9679

Si vous souhaitez savoir ce que la balise annotation-config fait en coulisse, consultez le fichier AnnotationConfigBeanDefinitionParser

Si vous souhaitez en savoir plus sur le mécanisme général utilisé pour définir ces balises, consultez le site suivant este de la documentation de référence de Spring.

Vous avez besoin d'une définition de schéma, d'un Gestionnaire d'espace-nom et un BeanDefinitionParser

1voto

Bonnes références par gkamal.

Spring enregistre tous ces espaces de noms personnalisés au démarrage de l'application, et les gestionnaires spécifiques à chaque espace de noms enregistrent les analyseurs pour chaque élément de l'espace de noms personnalisé. Voici par exemple un espace de nom personnalisé que j'ai créé dans l'un de mes propres projets :

https://github.com/williewheeler/kite/blob/master/src/main/java/org/zkybase/kite/config/xml/KiteNamespaceHandler.java

Remarquez que le NamespaceHandler ne fait qu'enregistrer un ensemble d'analyseurs pour l'espace de noms personnalisé.

Ensuite, lorsque Spring analyse le fichier de configuration, il transforme les éléments de l'espace de noms personnalisé en définitions de beans, comme vous le suggérez dans votre question. Parfois, il s'agit simplement d'une définition de bean très simple :

https://github.com/williewheeler/kite/blob/master/src/main/java/org/zkybase/kite/config/xml/CircuitBreakerParser.java

et parfois c'est un tas de définitions de haricots :

https://github.com/williewheeler/kite/blob/master/src/main/java/org/zkybase/kite/config/xml/AnnotationConfigParser.java

0voto

Il est utile d'externaliser les valeurs des propriétés d'une définition de haricot dans un fichier séparé.

Les propriétés définies sont résolues au moment du démarrage.

Les caractères de remplacement suivent ce style ${property-name}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X