¿Cuál es la diferencia entre las anotaciones @Component, @Repository & @Service en Spring?
¿Las anotaciones @Component
, @Repository
y @Service
pueden utilizarse indistintamente en Spring o proporcionan alguna funcionalidad concreta además de actuar como dispositivo de notación?
En otras palabras, si tengo una clase Service y cambio la anotación de @Service
a @Component
, ¿se comportará igual?
¿O la anotación también influye en el comportamiento y la funcionalidad de la clase?
1957
3
De Documentación de Spring:
En Spring 2.0 y posteriores, la anotación
@Repository
es un marcador para cualquier clase que cumpla el rol o estereotipo (también conocido como DataSon casi lo mismo - todos ellos significan que la clase es un bean de Spring. Los
@Service
,@Repository
y@Controller
son@Componentes
especializados. Puedes elegir realizar acciones específicas con ellos. Por ejemplo:@Controller
son utilizados por spring-mvc@Repository
son elegibles para la traducción de excepciones de persistenciaOtra cosa es que designes semánticamente los componentes a diferentes capas.
Una cosa que ofrece
@Component
es que puedes anotar otras anotaciones con él, y luego usarlas de la misma manera que@Service
.Por ejemplo, recientemente he hecho:
Así que todas las clases anotadas con
@ScheduledJob
son spring beans y además se registran como quartz jobs. Sólo tienes que proporcionar el código que maneja la anotación específica.El uso de las anotaciones
@Service
y@Repository
es importante desde la perspectiva de la conexión a la base de datos.@Service
para todas sus conexiones a la base de datos de tipo servicio web@Repository
para todas sus conexiones a la base de datos de procesos almacenados.Si no utiliza las anotaciones apropiadas, puede enfrentar excepciones de commit anuladas por transacciones de rollback. Verá excepciones durante la prueba de carga de estrés que están relacionadas con las transacciones JDBC rollback.