Vamos a entender el concepto de componentes dentro de una aplicación en Spring Boot y el uso de los estereotipos.
Que es un componente (@Component)
Un component es lo que le permite a Spring detectar los beans y colocarlos dentro de su contexto para ser utilizados.
Aprendimos antes, algunos conceptos sobre lo que es inyección de dependencias en Spring.
Allí entendimos el concepto de un bean y vimos que los bean son objetos administrados por Spring.
Cuando indicamos que una clase es un @Component, lo que hacemos es decirle a Spring que queremos que cree una instancia y la gestione.
@Component
public class MyClass {
public void doSomething() {
//..
}
}
Al momento de inicializar la aplicación, Spring hará lo siguiente:
- Buscará dentro de la aplicación las clases anotadas con @Component
- Creará una instancia de los componentes
- Dejará el componente en su contexto
- Buscará quién necesita esos componentes y los inyectará en quién los necesite.
Que son los estereotipos
Los estereotipos (Stereotypes) son componentes que extienden de @Component.
Los estereotipos más comunes son:
- @Controller / @RestController
- @Service
- @Repository
Todos ellos son también @Component, pero orientados a formar parte en una ‘capa’ particular de nuestro servicio.
Un @Controller formará parte de la ‘capa’ de controladores de Spring.
Un @Service será parte de la ‘capa’ de servicios encargado de la funcionalidad del negocio.
Un @Repository será parte de la ‘capa’ de persistencia cuya función será el acceso a los datos.
Observa, por ejemplo, la anotación @Service que es en definitiva un alias de un @Component. Lo mismo sucede con el resto de estereotipos.
Como utilizar los componentes @Controller, @Service, @Repository
Recordemos que un rest controller es también un controller. Tenemos varias formas para utilizar los componentes en nuestras clases.
Referencia por constructor:
Una vez que hemos creado los componentes, tenemos varias formas requerirlos.
Una de ellas y la recomendada es mediante el constructor.
Spring al crear la instancia reconocerá que esta clase necesita en su constructor otro componente y se encargará
de construir la clase utilizando el componente que necesite.
Observa que no es necesario el uso de @Autowired en este caso.
Referencia por atributo con @Autowired:
También podemos referenciar una dependencia mediante el uso de los atributos utilizando la annotation @Autowired
Autowired cargará el atributo con el componente utilizando reflection.
Referencia por setter con @Autowired:
Además de la referencia por constructor y por atributos, es posible agregar referencias en un los métodos set.
Conclusión
En este artículo aprendimos qué es y como usamos un Component en Spring y sus estereotipos @Controller, @Service, @Repository para crear una aplicación Rest en Spring Boot.
Visita este artículo sobre el Service y el Repository.