2011-03-21 11 views
7

Utilizamos las clases @Configuration para hacer la configuración Spring basada en Java. Estoy tratando de configurar una Jerarquía de AnnotationConfigApplicationContext (s).Jerarquía de configuración basada en anotaciones

Parece que funciona. Como puedo Autowire beans desde el contexto principal como miembros de beans creados a partir de uno de los contextos secundarios.

Sin embargo, no estoy logrando Autowire beans desde el contexto principal a los archivos de clase @Configuration, algo que es muy útil. Todos son nulos.

// parent context config 
@Configuration 
public class ParentContextConfig{ 
    @Bean parentBeanOne... 
    @Bean parentBeanTwo... 
} 

// child context config 
@Configuration 
public class ChildContextConfig{ 
    @Autowired parentBeanOne 

    @Bean childBeanOne... 
} 

// a sample bean 
@Component 
public class ChildBeanOne{ 
    @Autowired parentBeanTwo 
} 

En esta muestra, lo que quiero decir es parentBeanTwo adecuadamente creado mientras parentBeanOne no se autowired (null) para el archivo de configuración.

¿Qué me estoy perdiendo?

+0

¿Cómo se configuró la relación padre/hijo? – skaffman

+0

He encontrado que el autoenvío a ChildContexts funciona si declaras esos AnnotationConfigApplicationContext como beans en el contexto primario. Sin embargo, ¿empiezo a obtener "referencias circulares"? excepciones relacionadas ... No puedo identificar ninguna referencia circular. – Rafael

+0

Establecí la relación haciendo setParent (ctx) antes de registrar las clases de configuración @configurable. – Rafael

Respuesta

0

Creo que Spring quiere que use reglas de jerarquía estándar de Java para establecer las relaciones primarias entre los objetos de configuración. Es decir, haga que la clase de configuración hija extienda la clase de configuración principal.

+0

Sí, pero eso no es exactamente lo mismo. Como toda la jerarquía de clases estará en el mismo contexto de primavera. En algunos casos, desea que un contexto secundario acceda a un contexto principal, y no al revés, como con contenedores de servlet, etc. – Rafael

+1

¿hay algún nuevo desarrollo sobre esto? Parece un requisito básico de configuración. – Eugen

0

Para que esto funcione, el contexto niño debe importar el contexto de los padres, por ejemplo .:

@Configuration 
@Import(ParentContextConfig.class) 
public class ChildContextConfig{ 
    @Autowired parentBeanOne 
    ... 
    } 

Consulte la docu primavera sobre @Configuration para más informaciones.

Cuestiones relacionadas