2009-12-09 15 views
5

Mi piacerebbe essere in grado di caricare i file contest.xml di primavera al volo, in modo che siano cablati con contesti precedentemente caricati (cioè, in contextA.xml posso ref un bean definito in contextB.xml che era già caricato). Vorrei che i bean esistenti non venissero distrutti e quindi creati ogni volta che viene aggiunto un contesto.primavera: aggiungi il contesto xml al volo?

risposta

4

È abbastanza facile da fare, la maggior parte delle implementazioni BeanFactory e ApplicationContext hanno il concetto di un contesto padre.

BeanFactory newFactory = new XmlBeanFactory(xmlResource, yourParentBeanFactory); 

// if you what an ApplicationContext 

ApplicationContext newContext = new ClassPathXmlApplicationContext(new String[]{"newBeans.xml"}, parent); 

vedere http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/beans/factory/xml/XmlBeanFactory.html

Riferimenti all'interno del nuovo contesto che non può essere risolto entro, di per sé sono passati fino al genitore di ed al suo genitore.

Nota è possibile ottenere il contesto dell'applicazione corrente implementando ApplicationContextAware.

+0

E senza usare il genitore? – IttayD

+1

che comporterebbe la modifica del continuum del tempo di spazio e l'attraversamento dei flussi allo stesso tempo. Dando il nuovo contesto un genitore è il modo per farlo, non c'è davvero nessuna altra opzione. –

+0

In realtà, puoi semplicemente usare 'new ClassPathXmlApplicationContext (new String [] {" newBeans.xml "})'. Quindi otterrai un nuovo contesto di primavera che non ha alcun rapporto con il contesto esistente. – sleske