Parámetros por nombre spring

0

Por admin | Para la categoría de spring | noticia del 05-07-2010

Ejemplo para la inyección de dependencias en el que se configuran varios beans

Ficheros que intervienen en el ejemplo

Código de herramienta.java

1
2
3
4
5
6
7
package cuartoejemplo;
 
public interface Herramienta {
 
	abstract void utilidad();	
 
}

Código de Martillo.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package cuartoejemplo;
 
public class Martillo implements  Herramienta
{
 
	private String longitud;
 
	public Martillo (String longitud)
	{
		this.longitud = longitud;
	}
 
	public void utilidad ()
	{
		System.out.println("Apuntalar cosas");
	}
 
	public void getLongitud ()
	{
		System.out.println("La logintud es "+this.longitud);
	}
 
 
}

Código de sierra.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package cuartoejemplo;
 
public class Sierra implements Herramienta{
 
	private String color;
 
	public Sierra(String color)
	{ 
		this.color = color;
 
	}
 
	public void utilidad ()
	{  
		System.out.println("Sirve para serrar");
	}
 
	public void getColor()
	{
		System.out.println("Es de color"+this.color);
	}
 
}

Código de obrero.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package cuartoejemplo;
 
public class Obrero 
{
    private String nombre;
    private Herramienta herramienta;
 
    public Obrero (String nombre)
    {
    	this.nombre = nombre;
    }
 
    public void getNombre ()
    {
    	System.out.println("nombre: "+this.nombre);
    }
 
 
    public void setHerramienta ( Herramienta herramienta)
    {
    	this.herramienta = herramienta;
    }
 
    public void getHeramienta ()
    {
    	herramienta.utilidad();
 
    }
 
    public void inicio ()
    {
    	System.out.println("inicio");
    }
 
    public void eliminar()
    {
    	nombre="";
        herramienta = null;
 
    }
 
}

Código de obreroapp.java la aplicación principal, donde se obtiene el bean declerado en el fichero obrero.xml, llamamos a al bean trabajador1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package cuartoejemplo;
 
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
 
import org.springframework.core.io.Resource;
import org.springframework.core.io.ClassPathResource;
 
 
 
public class ObreroApp {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
		Resource recurso = new ClassPathResource("cuartoejemplo\\Obrero.xml");
 
		BeanFactory factory = new XmlBeanFactory (recurso);
 
		Obrero obrero   = (Obrero) factory.getBean ("trabajador1");
 
		obrero.getNombre();
 
		obrero.getHeramienta();
 
 
 
	}
 
}

Código de Obrero.xml, se pueden declarar los métodos de inicio y de destroy que se ejecutan al comienzo y al final de la vida del objeto.

Con el atributo id, establecemos el identificador para hacer uso de el en el programa principal. El atributo class establecemos la relación con el path a la clase, tiene como constructor el valor de obrero1

El bean herramienta declara un valor para el constructor de la clase con el valor de rojo

En el bean trabajodor1 tenemos el atributo autowire con el valor byname, estamos indicando una conexión automática del bean por nombre, de tal forma que se hace coincidir el valor de una propiedad con un bean del mismo nombre en este caso herramienta sin tener que pasar la referencia explicita del bean herramienta en trabajador1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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="herramienta" class="cuartoejemplo.Sierra">
       <constructor-arg value="rojo"/>            
    </bean>
 
    <bean id="trabajador1" class="cuartoejemplo.Obrero" autowire="byName"
      init-method="inicio"
      destroy-method="eliminar"           
     >       
 
    <constructor-arg value="obrero1"/>       
 
    </bean>
 
</beans>

Resultado

Comentarios cerrados automáticamente al pasar más de un año