Spring @import nos permite organizar de una mejor manera la configuración de Spring Framework . Normalmente en una configuración de Spring basada en anotaciones tenemos algo similar a lo siguiente:
package com.arquitecturajava.spring; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration public class SpringConfiguracion { @Bean public static HelperPersistencia helper1() { return new HelperPersistencia(); } @Bean public static HelperSeguridad helper2() { return new HelperSeguridad(); } }
En este caso el fichero es muy pequeño pero es bastante habitual que tenga cientos de lineas de código registrando cada uno de los beans que son necesarios , seguridad ,persistencia etc.
Podemos crear un programa principal y ejecutarlo:
package com.arquitecturajava.spring; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Principal { public static void main(String[] args) { AnnotationConfigApplicationContext contexto = new AnnotationConfigApplicationContext(); contexto.register(SpringConfiguracion.class); contexto.refresh(); HelperSeguridad helper1=contexto.getBean(HelperSeguridad.class); helper1.hola(); HelperPersistencia helper2=contexto.getBean(HelperPersistencia.class); helper2.hola(); } }
Veremos el resultado por la consola:
Los beans se ejecutan sin problema:
Spring @import
Sin embargo si tenemos decenas de beans ,esto acaba siendo problemático ya que es difícil clarificar que es todo lo que tenemos configurado. Para solventar este tipo de problemas Spring soporta la anotación @import . Con Spring @import podemos partir el fichero en varias partes y organizarlo todo mucho mejor.
Vamos a verlo en código:
package com.arquitecturajava.spring; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration public class SpringConfiguracionSeguridad { @Bean public static HelperSeguridad helper2() { return new HelperSeguridad(); } }
package com.arquitecturajava.spring; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SpringConfiguracionPersistencia { @Bean public static HelperPersistencia helper1() { return new HelperPersistencia(); } }
package com.arquitecturajava.spring; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @Import({SpringConfiguracionSeguridad.class,SpringConfiguracionPersistencia.class}) public class SpringConfiguracionMega { }
Acabamos de configurar Spring Framework apoyándonos en tres ficheros (SpringConfiguracionSeguridad, SpringConfiguracionPersistencia, SpringConfiguracionMega ) . De esta forma es mucho más fácil acceder a cada bloque de configuración organizado en las categorías que nosotros necesitemos.
Otros artículos relacionados:
Hola Cecilio,
Muchas gracias por todo lo que vas colgando.
¿Puede ser que la diferencia entre cuando listas el nombre de los ficheros (SpringConfiguracion) y los ficheros en sí (SpringConfiguracionMega) sea un pequeño error?
un saludo.
No te entiendo bien dani 😕 puedes concretar un poco más puede que tengas razón
¿Puede ser que el nombre de la clase SpringConfiguracionMega deba ser SpringConfiguracion?
Compilar compilará llamándose de cualquiera de los dos modos ;). Pero creo que mejorará la comprensión cuando debajo de las clases leemos el comentario
” apoyándonos en tres ficheros (SpringConfiguracion, SpringConfiguracionPersistencia, SpringConfiguracionSeguridad) “
Vale creo que lo he corregido , muchas gracias 🙂 . He puesto mega al final
Ahora nos hemos entendido 🙂
Muchas gracias una vez más por todo lo que vas compartiendo.
Si puedes elimina todo nuestro hilo y así queda más limpito todo 🙂
gracias por la corrección 🙂
Muchas gracias por tus píldoras super útiles
de nada 🙂 , me alegro que te sea útil 😉