12 de marzo de 2020

Anotaciones @Component

En la entrada anterior vimos como añadir un bean al contenedor de dependencias usando un fichero XML. En esta entrada vamos a cargar un bean usando la anotación @Component y pidiéndole Spring que escanee nuestros paquetes buscando esta anotación.

Cuando me refiero a la anotación @Component quiero referirme a ella o cualquiera de sus especializaciones como se puede ver en la siguiente figura.



Lo importante de ellas es que estas anotaciones permiten su autodetección y van a ser una forma muy fácil de añadir beans a nuestro contenedor de dependencias.

Estás anotaciones se usan a nivel de tipo y marcarán una clase para ser usada como definición de un bean de ese tipo.

En nuestro ejemplo la usamos sobre nuestra clase Test:
import org.springframework.stereotype.Component;

@Component
public class Test {
    ...
}
Si sólo marcamos un tipo con @Component no servirá de nada si no escaneamos el paquete que la contiene en su búsqueda. Por defecto las anotaciones y el escaneo de componentes están desactivados en Spring así que tendremos que configurar nuestra aplicación Spring para activarlo. Esto se hace con un fichero de configuración de la misma forma que usamos para crearnos el bean de tipo Test.

Para ello creamos un nuevo fichero de configuración al que llamaremos config-scan.xml y que contendrá el siguiente código:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="es.lanyu"/>

</beans>
Hay que fijarse en el paquete base que estamos declarando (en este caso base-package="es.lanyu"). Con esto le decimos a Spring que empiece a buscar anotaciones del tipo @Componente en el paquete base y todos los que están incluidos en él.

Para añadir esta configuración a nuestra aplicación modificamos la línea que creaba nuestro contenedor para que lea este fichero de configuración en vez del anterior (que tenía el nombre config.xml)
ConfigurableApplicationContext context = 
        new ClassPathXmlApplicationContext(
                   new String[]{"config-scan.xml"});
Ejecutándo ahora veremos que nos está creando un objeto de tipo Test con el valor por defecto en vez del valor que le habíamos puesto en nuestro fichero config.xml

Puedes encontrar el código hasta aquí en su repositorio de GitHub y ver el vídeo del webinar en este momento.


En la siguiente entrada vamos a ver qué pasa si definimos un bean del mismo tipo de dos formas distintas.

No hay comentarios:

Publicar un comentario

Compárteme

Entradas populares