0

Spring @configuration

Spring es uno de los frameworks mas habituales hoy en día a la hora de trabajar en JEE. Si tuviera que revisar los puntos débiles que el framework tiene , destacaría el tener que leer el fichero applicationContext.xml al iniciarle y los problemas de ClassNotFoundException que se suelen producir ya sea porque nos faltan librerias o porque hemos escrito incorrectamente el nombre de las clases.

Vamos a suponer que disponemos del siguiente fichero de configuración (applicationContext.xml).

applicationContext.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.xsd">
 
<bean id="servicioA"class="com.arquitecturajava.ServicioA">
 </bean>
 
<bean id="servicioB"class="com.arquitecturajava.ServicioB">
 </bean>
</beans>
``

Como podemos ver hemos definido dos beans en el fichero **servicioA** y **servicioB**  .Podemos usarlos en un programa de consola dela siguiente forma.

**Principal.java**

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Principal {

public static void main(String args[]) {

ApplicationContext contexto = new ClassPathXmlApplicationContext(“applicationContext.xml”);
ServicioA servicioA= (ServicioA) contexto.getBean(“servicioA”);
System.out.println(servicioA.mensaje());

}

}```

Aunque el uso es correcto siempre aparecen problemas como por ejemplo que en el **método getBean hayamos escrito ServicioA con la S “Mayuscula” **o que en el fichero applicationContext.xml no esten bien puestos los nombres de las clases etc .Son errores sencillos de corregir pero son errores molestos. Vamos a ver como eliminarlos.

**Spring @configuration
**
Spring soporta anotaciones de configuración a partir de su versión 3.0 que nos permiten enfocar de otra forma . Vamos a declarar una clase “ConfiguracionApp” que se encargue de realizar la configuración de la aplicación sin usar el fichero **“applicationContext.xml” **que es el que nos esta dando problemas .

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class ConfiguracionApp {
 
@Bean
 public ServicioA servicioA() {
 
 return new ServicioA();
 }
 @Bean
 public ServicioB servicioB() {
 return new ServicioB();
 }
}```

Si revisamos la clase ConfiguracionApp dispone de dos anotaciones de Spring Framemork .

**Spring @Configuration :**Anotación encargada de definir que la clase es una clase de configuración para el framework**Spring @Bean :**Anotación que marca como bean cada uno de los métodos de tal forma que esten disponibles para Spring

Realizadas estas modificaciones nuestra aplicaciónno necesitará utilizar ya el fichero applicationContext.xml . Todo quedará registrado con nuestra nueva clase que a nivel de compilación realizará las comprobaciones de nombres necesarias.Para usar la nueva clase de configuración con Spring en un programa de consola será tan sencillo como lo siguiente.



import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class PrincipalB {

public static void main(String args[]) {

AnnotationConfigApplicationContext contexto=
new AnnotationConfigApplicationContext();
contexto.register(ConfiguracionApp.class);
contexto.refresh();

ServicioA servicioA= (ServicioA) contexto.getBean(ServicioA.class);
System.out.println(servicioA.mensaje());

}

}```

Podemos apreciar que ya no hemos usado en ningún momento Strings a la hora de invocar los diferentes “beans” registrados y podemos eliminar el fichero applicationContext.xml.

Escribe tu comentario
+ 2