Este capítulo examina la implementación del principio de inversión de control (IoC) en Spring Framework. IoC también se conoce como inyección de dependencia (DI). Este es el proceso mediante el cual los objetos definen sus dependencias (es decir, los otros objetos sobre los que operan) solo a través de argumentos del constructor, argumentos del método de fábrica o propiedades que se establecen en una instancia del objeto después de que una fábrica lo crea o lo devuelva. método. Luego, el contenedor inyecta estas dependencias cuando se crea el bean. Este proceso es esencialmente una inversión (de ahí el nombre, Inversión de Control) del propio bean, que controla de forma independiente la creación o ubicación de sus dependencias mediante la construcción directa de clases o un mecanismo como una plantilla de Localizador de Servicios.
Los paquetes org.springframework.beans
y org.springframework.context
son la base del
contenedor Spring Framework IoC. Interfaz BeanFactory
proporciona un mecanismo de configuración avanzado capaz de
gestionar objetos de cualquier tipo. ApplicationContext
es una subinterfaz de BeanFactory
. Añade:
-
Integración más sencilla con funciones de AOP en Spring
-
Procesamiento de recursos de mensajes (para uso en internacionalización)
-
Eventos de publicación
-
Contextos específicos del nivel de aplicación, como
WebApplicationContext
para su uso en aplicaciones web.
En resumen, BeanFactory
proporciona la configuración y la funcionalidad principales, mientras que ApplicationContext
agrega más funciones específicas de la empresa. ApplicationContext
es un superconjunto completo de
BeanFactory
y se utiliza exclusivamente en este capítulo al describir el contenedor Spring IoC. Para
obtener más información sobre el uso de BeanFactory
en lugar de ApplicationContext,
consulte la sección en BeanFactory
API.
En Spring, los objetos que forman el núcleo de su aplicación y son administrados por el contenedor Spring IoC se llaman beans. Un bean es un objeto creado, compilado y administrado por el contenedor Spring IoC. De lo contrario, un bean es simplemente uno de los muchos objetos de su aplicación. Los beans y las dependencias entre ellos se reflejan en los metadatos de configuración utilizados por el contenedor.
Brevemente sobre los contenedores
La interfaz org.springframework.context.ApplicationContext
representa el contenedor Spring IoC y es
responsable de crear instancias, configurar y componer beans. El contenedor recibe instrucciones sobre qué objetos
crear, configurar y vincular leyendo los metadatos de configuración. Los metadatos de configuración están en forma
de XML, anotaciones Java o código Java. Esto le permite expresar los objetos que componen una aplicación y las ricas
interdependencias entre esos objetos.
Varias implementaciones de la interfaz ApplicationContext
vienen con Spring. Las aplicaciones
independientes normalmente crean una instancia de ClassPathXmlApplicationContext
o FileSystemXmlApplicationContext
. Aunque XML es el formato tradicional para
definir metadatos de configuración, puede indicarle al contenedor que utilice anotaciones o código Java como formato
de metadatos proporcionando una pequeña cantidad de configuración XML para habilitar de forma declarativa la
compatibilidad con estos formatos de metadatos adicionales.
En la mayoría de los casos de uso, no se requiere código personalizado explícito para crear una o más instancias de
un contenedor Spring IoC. Por ejemplo, en un escenario de aplicación web, ocho (más o menos) líneas de plantilla de
descriptor web XML en el archivo web.xml
de la aplicación suelen ser suficientes. Si está utilizando Spring Tools para Eclipse (un entorno de desarrollo
basado en Eclipse), puede crear fácilmente esta configuración estándar con unos pocos clics o pulsaciones de teclas.
El siguiente diagrama muestra una vista de alto nivel de cómo funciona Spring. Las clases de aplicación se combinan
con metadatos de configuración para que una vez que se crea e inicializa ApplicationContext
, tengas un
sistema o aplicación completamente configurado y ejecutable.
Metadatos de configuración
Como se muestra en el diagrama anterior, el contenedor Spring IoC utiliza una forma de metadatos de configuración. Estos metadatos de configuración son la forma en que usted, el desarrollador de la aplicación, le indica al contenedor Spring cómo crear, configurar y diseñar objetos en su aplicación.
Los metadatos de configuración se presentan tradicionalmente en un formato XML simple e intuitivo, que es lo que se utiliza en gran parte de este capítulo para explicar conceptos y capacidades clave del contenedor Spring IoC.
Para obtener información sobre el uso de otras formas de metadatos con un contenedor Spring, consulte:
-
Configuración basada en anotaciones: Spring 2.5 introdujo soporte para metadatos de configuración basados en anotaciones.: Spring 2.5 introducido soporte para metadatos de configuración basados en anotaciones.
-
Configuración basada en Java: desde Spring 3.0, muchas de las funciones proporcionadas por el proyecto Spring JavaConfig se han convertido en parte del núcleo Spring Framework. De esta manera, puede definir beans que sean externos a las clases de su aplicación utilizando archivos Java en lugar de XML. Para utilizar estas nuevas funciones, consulte las anotaciones
@Configuration
,@Bean
,@Import
y@DependsOn
.
Una configuración de Spring consta de al menos una, pero generalmente más de una, definición de bean que el
contenedor debe administrar. Los metadatos de configuración basados en XML configuran estos beans como elementos
<bean/>
dentro del elemento <bean/>
de nivel superior. La configuración de
Java normalmente utiliza métodos descritos por @Bean
en la clase @Configuration
.
Estas definiciones de beans corresponden a los objetos reales que componen su aplicación. Por lo general, define
objetos de capa de servicio, objetos de acceso a datos (DAO), objetos de visualización como instancias de Struts
Action
, objetos de infraestructura como Hibernate SessionFactories
, JMS
Queues
y así sucesivamente. Normalmente, los objetos de dominio detallados no se configuran en un contenedor porque el DAO
y la lógica empresarial suelen ser responsables de crear y cargar objetos de dominio. Sin embargo, puede utilizar la
integración de Spring con AspectJ para configurar objetos que se crearon fuera del control del contenedor IoC.
El siguiente ejemplo muestra la estructura básica de los metadatos de configuración basados en 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="..." class="...">
<!-- los colaboradores y la configuración de este bean se encuentran aquí -->
</frijol>
<bean id="..." class="...">
<!-- los colaboradores y la configuración de este bean se encuentran aquí -->
</frijol>
<!-- vea más definiciones de beans aquí -->
</beans>
- El atributo
id
es una cadena que identifica la definición de un bean individual. - El atributo
class
especifica el tipo de bean y utiliza el nombre de clase completo.
El valor del atributo id
se refiere a los objetos que interactúan. El XML para hacer referencia a
objetos que interactúan no se muestra en este ejemplo.
GO TO FULL VERSION