2010-11-22 37 views

Répondre

32

Spring vous permet de redéfinir le même nom de bean plusieurs fois et prend la dernière définition de bean traitée pour un nom donné comme étant celle qui gagne. Ainsi, par exemple, vous pourriez avoir un fichier XML définissant vos beans principaux, et l'importer dans un fichier XML spécifique au client, qui redéfinit également certains de ces beans. C'est un peu fragile, cependant, puisqu'il n'y a aucun mécanisme pour dire spécifiquement "cette définition de bean est un override".

J'ai trouvé que la façon la plus propre de gérer cela est d'utiliser le new @Bean-syntax introduced in Spring 3. Plutôt que de définir des beans en XML, vous les définissez en Java. Ainsi, vos beans de base seraient définis dans une classe sans aucun @Bean, et vos configs client la sous-classeraient, et remplaceraient les beans appropriés. Cela vous permet d'utiliser les annotations java standard @Override, indiquant explicitement qu'une définition de bean donnée est remplacée.

+0

Êtes-vous sûr de pouvoir redéfinir un bean avec le même identifiant/nom dans un ctx enfant? –

+9

en regardant cette page http://stackoverflow.com/tags/spring/topusers Je pense qu'il sait de quoi il parle –

+0

merci. Je ne remets pas en question l'exactitude de son message. Je voulais une réassurance sur cette affirmation particulière, car ma source de développement m'a dit que ce n'est pas possible dans les nouvelles versions du printemps, c'est-à-dire 2.5.x et plus tard. Il a essayé de redéfinir le bean (qui a été défini dans le contexte parent) dans un contexte enfant avec le même nom et il a reçu une erreur au démarrage. –