La ruta o rutas de ubicación pasadas al constructor ApplicationContext
son cadenas de recursos que
permiten que el contenedor se cargue desde varios recursos externos, como el sistema de archivos local, Java CLASSPATH
,
y así sucesivamente.
ApplicationContext contexto = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
val context = ClassPathXmlApplicationContext("services.xml", "daos.xml")
Después de explorar el contenedor Spring IoC, es posible que desee obtener más información sobre la abstracción
Spring Resource
, que proporciona un mecanismo conveniente para leer InputStreams desde lugares
definidos en la sintaxis de URI. En particular, las rutas de Recursos
se utilizan para crear
contextos de aplicaciones.
El siguiente ejemplo muestra el archivo de configuración del objeto de la capa de servicio
(services.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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- servicios -->
<bean id="petStore" class="org.springframework.samples.jpetstore.services.PetStoreServiceImpl">
<nombre de propiedad="cuentaDao" ref="cuentaDao"/>
<nombre de propiedad="itemDao" ref="itemDao"/>
<!-- los objetos interoperables adicionales y la configuración para este bean se encuentran aquí -->
</frijol>
<!-- aquí hay más definiciones de beans para servicios -->
</beans>
El siguiente ejemplo muestra el archivo de objetos de acceso a datos daos.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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="cuentaDao"
class="org.springframework.samples.jpetstore.dao.jpa.JpaAccountDao">
<!-- los objetos interoperables adicionales y la configuración para este bean se encuentran aquí -->
</frijol>
<bean id="itemDao" class="org.springframework.samples.jpetstore.dao.jpa.JpaItemDao">
<!-- los objetos interoperables adicionales y la configuración para este bean se encuentran aquí -->
</frijol>
<!-- aquí encontrará más definiciones de beans para objetos de acceso a datos -->
</beans>
En el ejemplo anterior, la capa de servicio consta de una clase PetStoreServiceImpl
y dos objetos de
acceso a datos de tipos JpaAccountDao
y JpaItemDao
(basados en el estándar relacional de
objetos JPA Object-Relational Mapping). El elemento property name
se refiere al nombre de una propiedad
JavaBean y el elemento ref
se refiere al nombre de otra definición de bean. Esta relación entre los
elementos id
y ref
expresa la dependencia entre objetos que interactúan.
Compilación de metadatos de configuración basados en XML
Esto puede resultar útil si las definiciones de beans abarcan varios archivos XML. Normalmente, un único archivo de configuración XML representa una capa o módulo lógico en la arquitectura.
Puede utilizar el diseñador de contexto de la aplicación para cargar definiciones de beans de todos estos fragmentos
XML. Este constructor ocupa múltiples ubicaciones de Resource
. Alternativamente, use una o más
apariciones del elemento para cargar definiciones de beans desde otro archivo o archivos. El siguiente ejemplo
muestra cómo hacer esto:
<beans>
<importar recurso="servicios.xml"/>
<importar recurso="recursos/messageSource.xml"/>
<importar recurso="/resources/themeSource.xml"/>
<bean id="bean1" class="..."/>
<bean id="bean2" class="..."/>
</beans>
En el ejemplo anterior, las definiciones de beans externos se cargan desde tres archivos: services.xml
,
messageSource.xml
y themeSource.xml.
Todas las rutas de ubicación hacen referencia al
archivo de definición que realiza la importación, por lo que services.xml
debe estar en el mismo
directorio o classpath que el archivo que realiza la importación, y messageSource.xml
y
themeSource.xml
debe ubicarse en resources
, ubicado debajo de la ubicación del archivo
importado. Como puede ver, se ignora la barra diagonal inicial. Sin embargo, dado que estas rutas son relativas, es
mejor no utilizar la barra diagonal en absoluto. El contenido de los archivos importados, incluido el elemento
<bean/>
de nivel superior, debe ser una definición de bean XML válida según el esquema Spring.
Es posible, aunque no recomendado, vincular archivos en directorios principales utilizando la ruta relativa
"../". Esto crea una dependencia de un archivo que está fuera de la aplicación actual. En particular, no se
recomienda dicha referencia para classpath:
(por ejemplo, classpath:../services.xml
),
donde la "más cercana" se selecciona usando un procedimiento de resolución en tiempo de ejecución se busca la
raíz del classpath y luego su directorio principal. Los cambios en la configuración de la ruta de clase pueden
provocar que se seleccione un directorio diferente e incorrecto.
Siempre puedes utilizar ubicaciones de recursos completas en lugar de rutas relativas: por ejemplo, file:C:/config/services.xml
o classpath:/config/services.xml
. Sin embargo, tenga en cuenta que está vinculando la
configuración de su aplicación a ubicaciones absolutas específicas. Generalmente es preferible preservar el
direccionamiento indirecto para dichas ubicaciones absolutas, por ejemplo, a través de marcadores de posición
"${....}" que se resuelven con las propiedades del sistema JVM en tiempo de ejecución.
El espacio de nombres en sí proporciona la posibilidad de utilizar la directiva de importación. Opciones de
configuración adicionales más allá de las simples definiciones de beans están disponibles en algunos de los espacios
de nombres XML proporcionados por Spring (por ejemplo, los espacios de nombres context
y
util
).
Definición de contenedores usando Groovy DSL
Como ejemplo adicional de metadatos cuya configuración está externalizada, las definiciones de beans también se pueden expresar usando una definición a través de Groovy DSL en Spring, como se conoce del marco Grails. Normalmente esta configuración se encuentra en un archivo ".groovy" y tiene la estructura que se muestra en el siguiente ejemplo:
beans {
fuente de datos (fuente de datos básica) {
driverClassName = "org.hsqldb.jdbcDriver"
URL = "jdbc:hsqldb:mem:grailsDB"
nombre de usuario = "sa"
contraseña = ""
configuración = [minuevo:"configuración"]
}
fábrica de sesiones (fábrica de sesiones) {
fuente de datos = fuente de datos
}
miServicio(MiServicio) {
nestedBean = { Otro frijol Bean ->
fuente de datos = fuente de datos
}
}
}
Este estilo de configuración es en gran medida equivalente a las definiciones de beans XML e incluso admite espacios
de nombres XML de configuración Spring. También le permite importar archivos de definición de beans XML utilizando
la directiva importBeans
.
GO TO FULL VERSION