2010-06-09 3 views
3

Dans la configuration de mes cas de test, j'ai ce code:Comment connecter StaticListableBeanFactory à ClassPathXmlApplicationContext?

ApplicationContext context = new ClassPathXmlApplicationContext(
      "spring/common.xml" 
    ); 
    StaticListableBeanFactory testBeanFactory = new StaticListableBeanFactory(); 

Comment puis-je connecter les deux de telle sorte que les tests peuvent enregistrer les haricots dans le testBeanFactory lors de l'installation et le reste de l'application les utilise au lieu de ceux définis dans common.xml?

Remarque: J'ai besoin de mélanger une configuration statique (common.xml) et une configuration dynamique. Je ne peux pas utiliser XML pour ce dernier, car cela signifierait écrire plus de 1000 fichiers XML.

Répondre

3

Vous pouvez utiliser ConfigurableListableBeanFactory.registerSingleton() au lieu de StaticListableBeanFactory.addBean():

ApplicationContext context = new ClassPathXmlApplicationContext(
      "spring/common.xml" 
    ); 

GenericApplicationContext child = new GenericApplicationContext(context); 

child.getBeanFactory().registerSingleton("foo", ...); 
0

Une alternative que vous pouvez essayer est d'avoir un Test.xml avec les définitions de haricot qui importe votre common.xml:

<import resource="spring/common.xml"/> 

<bean id="AnIdThatOverridesSomethingInCommon"/> 

Vous ne pouvez avoir une définition de haricot avec un identifiant particulier - dans la même fichier, il s'agit d'une erreur de validation XML, dans des fichiers différents Spring remplacera la définition. Edit: J'ai juste remarqué que ce n'est pas adapté à votre cas - je vais le laisser ici pour l'exhaustivité.

+0

Pas downvote en raison de la modifier :-) Merci –

+0

- c'est en fait ce que je l'utilise, mais je suppose que vous ne voudriez pas si vous essayez appliquer ceci à une charge de tests existants. – cyborg

Questions connexes