¿Que es el contenedor de Spring?

By | 12 agosto 2013

El contenedor de Spring es el espacio de memoria donde son cargados un conjunto de objetos instanciados y configurados a lo largo de toda la vida de la aplicación (application scope), aunque este comportamiento puede ser modificado por nosotros.

Dentro del contenedor de Spring se cargan objetos como controladores, manejadores, filtros, recursos para internacionalización, acceso a base de datos, subida de archivos, tareas programadas, captchas, etc…

El contenedor de Spring es por lo tanto una excelente idea para prevenir la concurrencia y optimizar los recursos, tanto a nivel de programación como de sistema, para cada llamada de uno o varios clientes vamos a reutilizar un mismo recurso de tipo concreto ya existente, en lugar de crear uno por cada llamada recibida, cada objeto en el contenedor de Spring se comporta como un Singleton.

El contenedor, ademas de albergar las instancias de todos estos objetos de Spring, hace posible una de las principales características de Spring, la inyección de dependencias. En este punto, normalmente hablaremos de que la creación de estos objetos son creados en tiempo de creación de la aplicación, debido a que en la mayoría de las ocasiones vamos a utilizar el contenedor creado a través de ApplicationContext, pero esto no es cierto del todo.

Existen dos tipos de contenedores en Spring.

  • BeanFactory - Interface que provee Spring para la creación, inyección de dependencias y manejo del ciclo de vida de estos objetos.
  • ApplicationContext – Interface que implementa BeanFactory, y que ademas de sus características implementa otra mas avanzadas para el manejo de otros servicios.

Antes hemos dicho que no era del todo cierto que los objetos sean cargados en el contenedor cuando la aplicación se esta iniciando, esto es debido, a que BeanFactory carga cada objeto en el contenedor cuando es utilizado por primera vez en tiempo de ejecución, mientras que ApplicationContext si que lo hace cuando la aplicación esta siendo desplegada.

Aparte de esta, existen mas diferencias entre BeanFactory y ApplicationContext, resumiendolas:

  1. ApplicationContext implementa BeanFactory y mejora el comportamiento con la implementación de otros servicios.
  2. ApplicationContext esta capacitado para publicar eventos a objetos en el contenedor registrados como listeners.
  3. Para desarrollo web usamos WebApplicationContext, una extensión de ApplicationContext que añade el método getServletContext.
  4. BeanFactory carga los objetos en el contenedor cuando son utilizados por primera vez, mientras que ApplicationContext lo hace en el despliegue de la aplicación.
Comparte esta entrada enShare on LinkedIn0Tweet about this on Twitter0Share on Facebook0Share on Google+0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *