jueves, 6 de agosto de 2009

Uso de inyeccion por constructor y setters en Spring

Muestra el uso basico de inyeccion por constructor y por setter con Spring.

commons-logging.jar
spring.jar

Definicio de la interface DatosPersonales

package org.dracof.spring.inyeccion;

public interface DatosPersonales {

public void setNombre(String nombre);

public void setEdad(int edad);

public void setRfc(String rfc);
}

Implementacion de la interface DatosPersonales

package org.dracof.spring.inyeccion.impl;

import org.dracof.spring.inyeccion.DatosPersonales;

public class DatosPersonalesImpl implements DatosPersonales {

private String nombre;
private int edad;
private String rfc;

public DatosPersonalesImpl(){
}

public DatosPersonalesImpl(String nombre, int edad, String rfc){
this.nombre = nombre;
this.edad = edad;
this.rfc = rfc;
}

public void setEdad(int edad) {
this.edad = edad;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public void setRfc(String rfc) {
this.rfc = rfc;
}

public String toString() {
StringBuilder cadena = new StringBuilder();
cadena.append("Nombre:").append( this.nombre );
cadena.append("; Edad: ").append( this.edad );
cadena.append("; RFC: ").append( this.rfc );
return cadena.toString();
}
}

Application Context

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
<!-- Inyeccion por setters -->
<bean id="datosPersonalesJuanito" class="org.dracof.spring.inyeccion.impl.DatosPersonalesImpl">
<property name="nombre" value="Juanito"/>
<property name="edad" value="33"/>
<property name="rfc" value="JAN32323212"/>
</bean>

<!-- Inyeccion por setters usando <value>-->
<bean id="datosPersonalesPepito" class="org.dracof.spring.inyeccion.impl.DatosPersonalesImpl">
<property name="nombre">
<value>Pepito</value>
</property>
<property name="edad">
<value>54</value>
</property>
<property name="rfc">
<value>PEP2145322</value>
</property>
</bean>

<!-- Inyeccion por constructor respetando orden de parametros -->
<bean id="datosPersonalesDracofito" class="org.dracof.spring.inyeccion.impl.DatosPersonalesImpl">
<constructor-arg value="Drascofito"/>
<constructor-arg value="28"/>
<constructor-arg value="DRA231234"/>
</bean>

<!-- Inyeccion por constructor indicando el orden de parametros con index -->
<bean id="datosPersonalesDracofito2" class="org.dracof.spring.inyeccion.impl.DatosPersonalesImpl">
<constructor-arg value="Drascofito" index="0"/>
<constructor-arg value="DRA231234" index="2"/>
<constructor-arg value="28" index="1"/>
</bean>

<!-- Inyeccion por constructor usando <value> -->
<bean id="datosPersonalesGordita" class="org.dracof.spring.inyeccion.impl.DatosPersonalesImpl">
<constructor-arg>
<value>Gordita</value>
</constructor-arg>
<constructor-arg>
<value>15</value>
</constructor-arg>
<constructor-arg>
<value>GOR544321</value>
</constructor-arg>
</bean>

<!-- Definicion de string para usarlo despues como ref -->
<bean id="nombreX" class="java.lang.String">
<constructor-arg value="Nombre Desconocido"/>
</bean>

<!-- Definicion de Integer para usarlo despues como ref -->
<bean id="edadX" class="java.lang.Integer">
<constructor-arg value="0"/>
</bean>

<!-- Definicion de string para usarlo despues como ref -->
<bean id="rfcX" class="java.lang.String">
<constructor-arg value="RFC Desconocido"/>
</bean>

<!-- Inyeccion por constructor usando referencias a otros beans definidos-->
<bean id="datosPersonalesDesconocido" class="org.dracof.spring.inyeccion.impl.DatosPersonalesImpl">
<constructor-arg ref="nombreX"/>
<constructor-arg ref="edadX"/>
<constructor-arg ref="rfcX"/>
</bean>
</beans>

Clase de pruebas

package org.dracof.spring.test;

import org.dracof.spring.inyeccion.DatosPersonales;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DatosPersonalesPrueba {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

DatosPersonales datosJuanito = (DatosPersonales) context.getBean("datosPersonalesJuanito");
System.out.println( datosJuanito.toString() );

DatosPersonales datosPepito = (DatosPersonales) context.getBean("datosPersonalesPepito");
System.out.println( datosPepito.toString() );

DatosPersonales datosDracofito = (DatosPersonales) context.getBean("datosPersonalesDracofito");
System.out.println( datosDracofito.toString() );

DatosPersonales datosDracofito2 = (DatosPersonales) context.getBean("datosPersonalesDracofito2");
System.out.println( datosDracofito2.toString() );

DatosPersonales datosGordita = (DatosPersonales) context.getBean("datosPersonalesGordita");
System.out.println( datosGordita.toString() );

DatosPersonales datosDesconocido = (DatosPersonales) context.getBean("datosPersonalesDesconocido");
System.out.println( datosDesconocido.toString() );

}
}

Salida:

Nombre:Juanito; Edad: 33; RFC: JAN32323212
Nombre:Pepito; Edad: 54; RFC: PEP2145322
Nombre:Drascofito; Edad: 28; RFC: DRA231234
Nombre:Drascofito; Edad: 28; RFC: DRA231234
Nombre:Gordita; Edad: 15; RFC: GOR544321
Nombre:Nombre Desconocido; Edad: 0; RFC: RFC Desconocido

Descargar Proyectito
InyeccionSpring.zip

Suerte.

No hay comentarios:

Publicar un comentario