La anotación Component de Spring se utiliza para denotar una clase como componente. Significa que el marco de Spring detectará automáticamente estas clases para la inyección de dependencias cuando se utilice la configuración basada en anotaciones y el escaneo del classpath.
Componente de Spring
En términos sencillos, un Componente es responsable de algunas operaciones. El marco de Spring proporciona otras tres anotaciones específicas que se deben utilizar al marcar una clase como Componente.
Servicio
: Denota que la clase proporciona algunos servicios. Nuestras clases de utilidad pueden ser marcadas como clases de Servicio.Repositorio
: Esta anotación indica que la clase trata con operaciones CRUD, generalmente se utiliza con implementaciones de DAO que tratan con tablas de bases de datos.Controlador
: Mayormente utilizado con aplicaciones web o servicios web REST para especificar que la clase es un controlador frontal y es responsable de manejar las solicitudes de usuario y devolver la respuesta apropiada.
Tenga en cuenta que todas estas cuatro anotaciones están en el paquete org.springframework.stereotype
y forman parte del archivo spring-context
jar. La mayor parte del tiempo, nuestras clases de componentes caerán bajo una de sus tres anotaciones especializadas, por lo que es posible que no use la anotación @Component
con mucha frecuencia.
Ejemplo de Componente Spring
Creemos una aplicación de Spring Maven muy simple para mostrar el uso de la anotación Spring Component y cómo Spring la detecta con configuración basada en anotaciones y exploración de classpath. Cree un proyecto Maven y agregue la siguiente dependencia principal de Spring.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
Eso es todo lo que necesitamos para obtener las características principales del framework Spring. Creemos una clase de componente simple y márquela con la anotación @Component
.
package com.journaldev.spring;
import org.springframework.stereotype.Component;
@Component
public class MathComponent {
public int add(int x, int y) {
return x + y;
}
}
Ahora podemos crear un contexto de Spring basado en anotaciones y obtener el bean MathComponent
de él.
package com.journaldev.spring;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class SpringMainClass {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.journaldev.spring");
context.refresh();
MathComponent ms = context.getBean(MathComponent.class);
int result = ms.add(1, 2);
System.out.println("Addition of 1 and 2 = " + result);
context.close();
}
}
Solo ejecute la clase anterior como una aplicación Java normal y debería obtener la siguiente salida en la consola.
Jun 05, 2018 12:49:26 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@ff5b51f: startup date [Tue Jun 05 12:49:26 IST 2018]; root of context hierarchy
Addition of 1 and 2 = 3
Jun 05, 2018 12:49:26 PM org.springframework.context.support.AbstractApplicationContext doClose
INFO: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@ff5b51f: startup date [Tue Jun 05 12:49:26 IST 2018]; root of context hierarchy
¿Te diste cuenta del poder de Spring? No tuvimos que hacer nada para inyectar nuestro componente en el contexto de Spring. La siguiente imagen muestra la estructura de directorios de nuestro proyecto de ejemplo de componente Spring. También podemos especificar el nombre del componente y luego obtenerlo del contexto de Spring usando el mismo nombre.
@Component("mc")
public class MathComponent {
}
MathComponent ms = (MathComponent) context.getBean("mc");
Aunque he utilizado la anotación @Component
con MathComponent, en realidad es una clase de servicio y deberíamos usar la anotación @Service
. El resultado seguirá siendo el mismo.
Puedes consultar el proyecto en nuestro Repositorio de GitHub.
Referencia: Documentación de la API
Source:
https://www.digitalocean.com/community/tutorials/spring-component