Inyección de una lista de servicios en Spring

Inyección de una lista de servicios en Spring.


0. Índice de contenidos.


1. Introducción.

En este tutorial vamos a ver como podemos inyectar una lista de servicios de Spring mediante un archivo xml o mediante anotaciones. Esto puede resultarnos útil si queremos crear una interfaz o una clase abstracta que implementen o extiendan nuestros servicios y luego utilizar la lista sin necesidad de saber que tipo de clase estamos usando.

En este sencillo ejemplo crearemos tres tareas para tres departamentos de una empresa, que implementarán la interfaz TaskProvider con un método para que nos devuelvan el nombre de la tarea. En el ejemplo simplemente devolverán un String con el nombre de la tarea, pero podríamos querer que cada implementación realizase las consultas o procesos necesarios para generar su tipo de tarea, para lo que si necesitaríamos otros beans de Spring como podría ser por ejemplo un Dao.

Para probar que se realiza la inyección correctamente mediante el xml y mediante anotaciones haremos dos test.


2. Entorno.

  • Hardware: MacBookPro8,2 (2 GHz Intel Core i7, 4GB DDR3 SDRAM).
  • AMD Radeon HD 6490M 256MB.
  • Sistema Operativo: Mac OS X Snow Leopard 10.6.7.
  • Eclipse Helios
  • Maven 3.0.3
  • Spring 3.0.5.RELEASE

3. Creación del proyecto y las clases de las tareas.

Creamos un proyecto de maven y le añadimos las dependencias de spring y junit al pom.xml

Después nos creamos nuestra interfaz TaskProvider:

Y las tres clases que la implementarán:


4. Realizar la inyección con un archivo xml.

Ahora creamos nuestro archivo xml para configurar la lista de TaskProviders, yo lo he llamado applicationContext-xml-injection-test.xml:

Y ahora creamos nuestra clase de test para probar que funciona:


5. Realizar la inyección con anotaciones.

Vamos a hacer lo mismo utilizando anotaciones, anotamos las tres implementaciones con @Service y creamos otro archivo xml (applicationContext-annotation-test.xml):

En el que decimos que usamos anotaciones y el paquete donde tiene que buscar los componentes anotados (que es en el qué estarán nuestros servicios).

Y el test para probar que funciona:


6. Conclusiones.

Hemos podido ver como podemos inyectar fácilmente una lista de servicios desde un archivo xml o mediante anotaciones. Si quereís descargaros los fuentes podéis hacerlo aquí.

Espero que os haya resultado útil.

Un saludo.

César López.