Que son los Componentes y los Estereotipos en Spring Boot

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 en otro post 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.

Spring Boot Component Scan

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.

Spring Boot Component

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.

Spring Boot Component Service

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.

Spring Boot Component Constructor

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.

Spring Boot Component Autowired

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.

Spring Boot Component 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 estos otros post donde hablo del service y del repository.

If you wish to send me any corrections or suggestions, please contact me.
Thanks for your feedback :)

Ver también