Ejemplo sencillo con SpringFramework Core

De ChuWiki
Saltar a: navegación, buscar

Core es una especie fábrica de beans sofisticada que permite quitar del código java la instanciación, inicialización y establecer dependencias entre beans. Toda esta información se guarda en un fichero XML y la fábrica de beans se encarga automáticamente de instanciar, inicializar los beans y pasar unos a otros, de forma que se "vean".

Vamos a hacer aquí un pequeño ejemplo tonto con esta fábrica de beans.

Primero necesitamos hacer una clase java que sea un bean. Por ejemplo la siguiente

package com.chuidiang.pruebas.spring;


/** 
 * Bean con los atributos correspondientes a los campos de la tabla de base
 * de datos.
 * @author chuidiang
 */
public class Persona {
	int id;
	String nombre;
	String fechaNacimiento;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getFechaNacimiento() {
		return fechaNacimiento;
	}
	public void setFechaNacimiento(String fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}
	
	/** Para poder escribir el bean en pantalla de forma rápida */
	public String toString()
	{
		return ""+id+" "+nombre+" "+fechaNacimiento;
	}
}

Simplemente tienes tres atributos: un entero id, un String nombre y un String fechaNacimiento. No ponemos Date porque complicaría el ejemplo innecesariamente, ya que la factoría de beans necesitará convertir este Date a un String y viceversa. Esta conversión no está soportada por defecto y deberíamos implementarla.

Ahora creamos el fichero XML que leerá la factoría de beans para saber qué tiene que hacer. Este fichero XML, para este solo bean, es bastante tonto y lo llamaremos beans.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-2.0.xsd">

  <bean id="Juan" class="com.chuidiang.pruebas.spring.Persona">
    <property name="id" value="1"/>
    <property name="nombre" value="Juan"/>
    <property name="fechaNacimiento" value="11/12/1943"/>
  </bean>
  
  <bean id="Pedro" class="com.chuidiang.pruebas.spring.Persona">
    <property name="id" value="2"/>
    <property name="nombre" value="Pedro"/>
    <property name="fechaNacimiento" value="1/1/1999"/>
  </bean>
 
</beans>

Cada tag <bean> se convertirá en una instancia de un bean. El id nos permite identificar esa instancia concreta. El class nos dice qué clase es el bean. Con este fichero de ejemplo, se harán dos new de com.chuidiang.pruebas.spring.Persona. A uno lo identificaremos como Juan y al otro como Pedro. Los atributos de cada uno de ellos se rellenarán con los <property> que se indican dentro de cada tag <bean>

Puedes ver que las fechaNacimiento se rellenan con un String del estilo "11/12/1943". Esta es la conversión que necesita hacer la factoría de beans, que comentabamos antes y que no sabe hacer. Otras conversiones más sencillas, como "1" a int, sí sabe hacerlas.

El código java que tenemos que hacer para instanciar la factoria de beans y obtener estos dos beans es el siguiente

package com.chuidiang.pruebas.spring;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;

public class PruebaBeanContainer {

	public static void main(String[] args) {
		Resource resource = new FileSystemResource("beans.xml");
		BeanFactory factory = new XmlBeanFactory(resource);
		System.out.println(factory.getBean("Juan"));
		System.out.println(factory.getBean("Pedro"));
	}
}

Primero instanciamos un FileSystemResource pasándole el fichero beans.xml. Por supuesto, deberemos poner el path si no está en el directorio actual de ejecución.

Luego instanciamos la factoría de beans XmlBeanFactory. Ya está todo listo. Ahora sólo queda trabajar.

Pedimos y escribimos en pantalla ambos beans, "Juan" y "Pedro".

Por supuesto, esto es un ejemplo muy tonto y sencillo. En el fichero beans.xml podemos invocar constructores con parámetros para los beans, hacer que unos beans tengan referencias a otros, indicar que sólo puede haber una única instancia de un bean -patrón Singleton-, etc.