Cuando yo empecé con Spring lo miraba muy complicado y hasta cierto punto confuso, pero tirarme al agua directamente con un par de proyectos y googleando un poco he aprendido bastante. En el transcurso de mi aprendizaje en muy rara ocasión mirabla algo concreto, además empecé usando la versión 3 de Spring, la cual con la versión 2.5 varía considerablemente en muchas cosas. La ayuda que proporciona la página de Spring está bastante entendible.

En este post quiero mostrar como configurar nuestros beans con Spring. He utilizado Netbeans 6.9.1 como IDE de desarrollo y un proyecto de Maven para la gestión de dependencias.  La versión de Spring que he utilizado es las 3.0.2.RELEASE.
Para configurar spring se utiliza uno o varios archivos xml, en este caso he creado el archivo applicationContext.xml, la estructura inicial del xml debe de ser la siguiente:

<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-3.0.xsd">
<!-- Definición de Beans -- >
</beans>

Configuración de un bean

Suponiendo que se tiene el siguiente bean:

public class BasicBean {

private int id;
private String name;
private String description;

public BasicBean() {
this.id = 0;
this.name = "";
this.description = "";
}

public BasicBean(int id, String name, String description) {
this.id = id;
this.name = name;
this.description = description;
}

@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("BasicBean(id={").append(this.id)
.append("}, name={\"").append(this.name)
.append("\"}, description={\"").append(this.description)
.append("\"})");
return builder.toString();
}
// setters and getters
}

Hay varias formas de configurar este bean dentro del xml anterior:

  • La forma normal, por decirlo de esa manera, es la siguiente:
    <bean name="basicBeanConf1" class="gt.edu.guatejug.springtutoriala.beans.BasicBean">
    <property name="id"><value>1</value></property>
    <property name="name"><value>Bean Name 1</value></property>
    <property name="description"><value>Description form bean with id 1</value></property>
    </bean>

    En donde name, es el nombre que identifica al bean y debe de ser único, en el atributo class, se le indica el tipo de dato del bean.

    Dentro del tag <property>, van todas las propiedades del bean que tienen setters y getters implementados, con el atributo type se le puede indicar el tipo de dato de la propiedad, si no se le ingresa, Spring automaticamente determina el tipo de dato y dentro de este tag, el tag <value> que indica el valor de la propiedad.

  • La forma corta de configurar un bean es la siguiente:
    <bean name="basicBeanConf2" class="gt.edu.guatejug.springtutoriala.beans.BasicBean">
    <property name="id" value="2" />
    <property name="name" value="Bean Name 2" />
    <property name="description" value="Description for bean with id 2" />
    </bean>

    Ya no se utiliza el tag value, para poner el valor se utiliza como atributo del tag property.

  • Otra forma de configurar un bean es haciendo uso del equema p, esta forma de configurar beans aparece desde la versión 2.0.

    Primero que nada se debe de declarar el esquema en el nodo raiz del xml de la siguiente forma:

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <!-- Definición de Beans -- >
    </beans>

    Teniendo hecho lo anterior, para configurar un bean podemos hacer lo siguiente:

    <bean name="basicBeanConf3" class="gt.edu.guatejug.springtutoriala.beans.BasicBean"
    p:id="3" p:name="Bean Name 3" p:description="Description for bean with id 3"/>

    Todas las declaraciones se hacen desde que se declara el bean sin necesidad de utilizar otros tag.

    Los atributos del bean se mandan a llamar despues de p: y son los mismos como se declaran en el bean.

  • Tambien se puede llamar a un constructor cuando se crea un bean, se hace de la siguiente forma:
    <bean name="basicBeanConf4" class="gt.edu.guatejug.springtutoriala.beans.BasicBean">
    <constructor-arg>
    <value>4</value>
    </constructor-arg>
    <constructor-arg>
    <value>Bean Name 4</value>
    </constructor-arg>
    <constructor-arg>
    <value>Description for bean with id 4</value>
    </constructor-arg>
    </bean>
    Spring automaticamente, detectar el constructor adecuado conforme la configuración que se hizo. En otro post explicaré mas a detalles la llamada a los constructures de un bean.

Corriendo el demo

Basta de configuraciones, ahora para probar lo que se explicó anteriormente he utilizado una clase con el metodo main, con el siguiente código:

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

BasicBean basicBean = (BasicBean) context.getBean("basicBeanConf1");
System.out.println(basicBean.toString());

basicBean = (BasicBean) context.getBean("basicBeanConf2");
System.out.println(basicBean.toString());

basicBean = (BasicBean) context.getBean("basicBeanConf3");
System.out.println(basicBean.toString());

basicBean = (BasicBean) context.getBean("basicBeanConf4");
System.out.println(basicBean.toString());

}

En la línea 2, se inicializa indicando el archivo xml que contiene los beans. Esto varía dependiendo el contexto en el que se está utilizando Spring.

Al ejecutar el código aparece en consola lo siguiente:

BasicBean(id={1}, name={"Bean Name 1"}, description={"Description for bean with id 1"})
BasicBean(id={2}, name={"Bean Name 2"}, description={"Description for bean with id 2"})
BasicBean(id={3}, name={"Bean Name 3"}, description={"Description for bean with id 3"})
BasicBean(id={4}, name={"Bean Name 4"}, description={"Description for bean with id 4"})

Esto es solo un pequeño ejemplo de como configurar beans con Spring 3. Para descargar el código fuente de este ejemplo, pulse AQUÍ.