Diferencia entre las anotaciones @Component, @Repository, @Service y @Controller en Spring

Las anotaciones de Spring son una forma de metadatos que proporcionan datos sobre un programa. Las anotaciones se utilizan para proporcionar información complementaria sobre un programa. No tiene un efecto directo sobre el funcionamiento del código que anotan. No cambia la acción del programa compilado. Aquí, vamos a discutir la diferencia entre las 4 anotaciones más importantes en Spring, @Component, @Repository, @Service y @Controller.

Anotación @Component

@Component es una anotación de nivel de clase. Se utiliza para denotar una clase como un Componente. Podemos usar @Component en toda la aplicación para marcar los beans como componentes administrados de Spring. Un componente es responsable de algunas operaciones. Spring Framework proporciona otras tres anotaciones específicas para usar al marcar una clase como componente. 

  1. @Servicio
  2. @Repositorio
  3. @Controlador
Types Of Component Annotation

 

Para leer más sobre la anotación @Component, consulte el artículo Spring @Component Anotation

A. @ Anotación de servicio

En una aplicación, la lógica empresarial reside dentro de la capa de servicio, por lo que usamos la anotación @Service para indicar que una clase pertenece a esa capa. Es una especialización de @Component Annotation . Una de las cosas más importantes de la anotación @Service es que solo se puede aplicar a las clases. Se utiliza para marcar la clase como proveedor de servicios. Por lo tanto, la anotación general de @Service se usa con clases que brindan algunas funcionalidades comerciales. Spring context detectará automáticamente estas clases cuando se utilice la configuración basada en anotaciones y el escaneo de classpath.

Para leer más sobre la anotación @Service, consulte el artículo Spring @Service Anotation

B. Anotación @Repository

La anotación @Repository también es una especialización de la anotación @Component que se utiliza para indicar que la clase proporciona el mecanismo para la operación de almacenamiento, recuperación, actualización, eliminación y búsqueda en objetos. Aunque es una especialización de la anotación @Component, Spring Framework detecta automáticamente las clases de Spring Repository a través del escaneo de classpath. Esta anotación es una anotación de estereotipo de propósito general que se parece mucho al patrón DAO donde las clases DAO son responsables de proporcionar operaciones CRUD en las tablas de la base de datos. 

Para leer más sobre la anotación @Repository, consulte el artículo Spring @Repository Anotation

C. Anotación @Controller

La anotación Spring @Controller también es una especialización de la anotación @Component . La anotación @Controller indica que una clase en particular cumple la función de un controlador . La anotación Spring Controller generalmente se usa en combinación con métodos de controlador anotados basados ​​en la anotación @RequestMapping . Solo se puede aplicar a las clases. Se utiliza para marcar una clase como controlador de requests web. Se usa principalmente con aplicaciones Spring MVC . Esta anotación actúa como un estereotipo de la clase anotada, indicando su rol. El despachador escanea dichas clases anotadas en busca de métodos asignados y detecta anotaciones @RequestMapping .

Para leer más sobre la anotación @Controller, consulte el artículo Anotación Spring @Controller

Semejanza

Una de las consultas interesantes que surgen frente a un desarrollador es si las anotaciones @Component, @Repository, @Service y @Controller se pueden usar indistintamente en Spring o proporcionan alguna funcionalidad en particular. En otras palabras, si tenemos una clase de servicio y cambiamos la anotación de @Service a @Component, ¿seguirá comportándose de la misma manera? 

Entonces, para responder lo mismo, con respecto a la detección automática de escaneo y la inyección de dependencia para BeanDefinition, todas estas anotaciones (@Component, @Repository, @Service y @Controller) son iguales. Podríamos usar uno en lugar de otro y todavía podemos salirnos con la nuestra.

A estas alturas, queda claro que @Component es una anotación de estereotipo de propósito general que indica que la clase es un componente Spring y las anotaciones @Repository, @Service y @Controller son tipos especiales de anotación @Component. Ahora, finalmente, concluyamos trazando la tabla de diferencias entre todos los tipos de anotaciones para comprender mejor lo siguiente:  

@Anotación de servicio

@Anotación del repositorio

Anotación @Controller

La anotación @Service se usa con clases que brindan algunas funcionalidades comerciales. La anotación @Repository se usa para indicar que la clase proporciona el mecanismo para la operación de almacenamiento, recuperación, actualización, eliminación y búsqueda en objetos. La anotación @Controller indica que una clase en particular cumple la función de un controlador. 
@Service Annotation es una especialización de @Component Annotation. @Repository Annotation también es una especialización de @Component Annotation. La anotación @Controller también es una especialización de la anotación @Component. 
Se utiliza para marcar la clase como proveedor de servicios. Se utiliza para marcar la interfaz como proveedor de DAO (objeto de acceso a datos). Se utiliza para marcar una clase como controlador de requests web.
Es un estereotipo para la capa de servicio. También es un estereotipo para la capa DAO. También es un estereotipo para la capa de presentación (spring-MVC).
El cambio puede ser posible. Pero no se recomienda.  El cambio puede ser posible. Pero no se recomienda.  No podemos cambiar esta anotación con ninguna otra como @Service o @Repository. 
Es una anotación de estereotipo. También es una anotación de estereotipo. También es una anotación de estereotipo.

Publicación traducida automáticamente

Artículo escrito por AmiyaRanjanRout y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *