Inyección de dependencias con Spring

David Galisteo Cantero

Veamos cómo hacer inyección de dependencias en Java con el framework Spring.

La inyección de dependencias entre objetos de negocio puede ser algo tediosa y compleja si la hacemos manualmente, para facilitarnos esta tarea, contamos con la ayuda del contenedor IoC (Inversion of Control, pasa el control del proceso de interconexión de objetos de la fase de compilación a la de ejecución) de Spring y de la inyección de dependencias.

Vamos a crear un proyecto Java Web desde cero para ilustrar el ejemplo, también podríamos hacerlo con una aplicación Java normal, puedes ver cómo crearla en este post.

Bien, como servidor de aplicaciones Java elegiré Glassfish, aunque también podemos utilizar Tomcat.

Comencemos creando el proyecto:

java proyecto web

A continuación vamos a agregar la librería de Spring, vamos a nuestro proyecto y en ‘Libraries’, pinchamos con el botón derecho y pulsamos en ‘Add library’, seleccionando Spring Framework:

libreria spring java

Bien, en este ejemplo vamos a crear una clase ‘Hotel’, la cual tendrá un parámetro ‘Cliente’, ahora mismo no es realista al tener solo un cliente, dejamos para próximas entradas las colecciones de datos (Map, List…), bien, así que un Hotel tendrá un Cliente.

clase Hotel:

public class Hotel {
    Cliente cliente;
 
    public Cliente getCliente() {
        return cliente;
    }
 
    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }
 
    public Hotel(){
 
    }
 
    public Hotel(Cliente c){
        cliente = c;
    }
}

Recordad que debemos añadir constructor y getter/setter de aquella propiedad que queramos inyectar.

Clase Cliente:

public class Cliente {
    String dni;
 
    public String getDni() {
        return dni;
    }
 
    public void setDni(String dni) {
        this.dni = dni;
    }
 
    public Cliente(){
 
    }
 
    public Cliente(String d){
        dni = d;
    }
}

Bien, ya tenemos las clases java, ahora vamos a configurar el ApplicationContext.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
 http://www.springframework.org/schema/beans/spring-beans.xsd">
 
 <bean id="hot" class="beans.Hotel" >
    <property name="cliente" ref="cli"/>
 </bean>
 
 <bean id="cli" class="beans.Cliente" >
     <constructor-arg name="d" value="123456789"/>
 </bean>
 
</beans>

Creamos dos beans, uno de clase Hotel y otro de clase Cliente, el orden no importa, al primero le decimos que la propiedad “cliente” (el atributo cliente de la clase Hotel) apunta al bean “cli” que es de tipo “Cliente”. Este último, lo creamos pasando como parámetro “d” el dni especificado.

De esta manera, ya tendríamos hecha la inyección de dependencias, ahora, al ser un proyecto web, tendríamos que crear servlets/jsp’s para, por ejemplo, mostrar datos por pantalla, ese tema escapa de este post.

Cabe destacar que la inyección de dependencias también puede realizarse con la anotación @Autowired , Spring busca un bean del mismo tipo que el atributo que se etiqueta y hace la inyección:

...
@Autowired
Cliente cliente;
...

Por último, necesitamos configurar el fichero web.xml, el cual quedaría así:

<?xml version="1.0" encoding="UTF-8"?>
 
<web-app version="3.0" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd">
 
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/ApplicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>
</web-app>

El árbol de nuestro proyecto quedaría de la siguiente manera:

arbol directorio

Espero que os haya sido útil

HackSaludos!

Publicado el 27-12-2013

Compartelo!

1 comentario

  • Moises dice:

    Muy interesante, explicado de una forma muy entendible y que mejor que con ejemplo, me ah quedado claro .. muchas gracias por compartir 🙂

Deja un comentario

Comentanos

*
Ir arriba de la pagina