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


