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?