2009-07-07 2 views
3

У меня есть иерархия контекстов приложений. Боб, определенный в родительском контексте, зависит от компонента, определенного в дочернем элементе. Вот как это выглядит:Spring: контексты вложенных приложений

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); 
    } 
    } 

Файл XML, определяющий «а» боб выглядит следующим образом:

<?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> 

Проблема в том, что B не вводят в A. Injection будет происходить только тогда, когда я зарегистрируйте сингл «b» с родителем - это не вариант в моей программе.

Любые идеи?

ответ

10

Вы не можете этого сделать. Родительские контексты не могут ссылаться на определения bean в дочерних контекстах. Он работает только наоборот.

Смежные вопросы