2011-03-14 17 views
8

Según The IoC Container, Spring puede gestionar una jerarquía de contextos o una jerarquía de contenedores y luego usar el <ref parent="beanId"/> para referirse a un bean en un contexto principal. ¿Qué mecanismo usa Spring para crear esta jerarquía de contenedores? ¿Se puede usar el comando <import resource="application-context.xml"/> para crear esta jerarquía? Proporcione un ejemplo de un contexto de aplicación que forme una jerarquía.¿Cómo crea Spring un contexto de aplicación o una jerarquía de contenedor?

Respuesta

13

La jerarquía de contexto de la aplicación se crea automáticamente; por ejemplo, cada aplicación Spring MVC crea un contexto separado para cada DispatcherServlet. Este contexto es un elemento secundario de un contexto de padres común. De esta forma, cada contexto secundario puede acceder a beans desde el contexto primario, pero no al revés. También los contextos de hermanos están separados e invisibles el uno para el otro.

Puede crear jerarquía de contexto manualmente para proporcionar un nivel más fino de granularidad en su proyecto. Esto se puede lograr, p. usando varios constructores de ClassPathXmlApplicationContext.

<import> constructo combina frijoles del archivo importado, por lo que es una forma de dividir físicamente definiciones de beans en varios archivos, pero todos terminan en un contexto. Por cierto, es una pena que no haya una etiqueta XML para definir el archivo de contexto secundario (?)

+0

Sí, estoy de acuerdo en que Spring tenía una etiqueta XML para los archivos de contexto de bean que podría definir un archivo de contexto secundario. –

+0

Veo lo que quiere decir acerca de cómo los constructores 'ClassPathXmlApplicationContext' determinan la jerarquía de contexto. Este enfoque me parece bastante incómodo o al menos asimétrico para los archivos contenedores de frijoles. ¿La idea es desacoplar los contenedores de frijoles unos de otros, excepto a través de la clase 'ClassPathXmlApplicationContext'? –

+1

Si se acostumbró a los contenedores de servlets que inician automáticamente el contexto de la aplicación, usar 'ClassPathXmlApplicationContext' parece incómodo, pero es la única forma de crear un elemento secundario explícitamente (otro es usar Spring MVC). No tengo conocimiento de otras formas de crear contextos secundarios de forma menos manual (declarativa). –

Cuestiones relacionadas