2009-07-07 4 views
3

J'ai une hiérarchie de contextes d'application. Le bean défini dans le contexte parent dépend d'un bean défini dans l'enfant. Voici à quoi ça ressemble:Spring: contextes d'application imbriqués

public class X { 

    public static class A { 
     public B b; 
     public void setB(B b) { this.b = b; } 
    } 

    public static class B { } 

    public static void main(String[] args) { 
     ClassPathXmlApplicationContext parent = new ClassPathXmlApplicationContext(
      "/a.xml"); 
     go1(parent); 
    } 

    public static void go1(ClassPathXmlApplicationContext parent) { 
     GenericApplicationContext child = new GenericApplicationContext(parent); 

     child.getBeanFactory().registerSingleton("b", new B()); 

     A a = (A) child.getBean("a"); 
     Assert.assertNotNull(a.b); 
    } 
    } 

Le fichier XML définissant le « un » haricot ressemble à ceci:

<?xml version="1.0" encoding="UTF-8"?> 

    <beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 

    <bean id="a" class="X$A" autowire="byName" lazy-init="true"/> 


    </beans> 

Le problème est que B ne soit pas injecté dans A. L'injection ne se produira que si je enregistrer le singleton "b" avec le parent - ce qui n'est pas une option dans mon programme.

Des idées?

Répondre

10

Vous ne pouvez pas faire cela. Les contextes parent ne peuvent pas faire référence aux définitions de bean dans les contextes enfants. Cela ne fonctionne que dans l'autre sens.

Questions connexes