Wat's het verschil tussen @Component, @Repository &; @Service annotaties in Spring?
Kunnen @Component
, @Repository
en @Service
annotaties door elkaar worden gebruikt in Spring of hebben ze een bepaalde functionaliteit naast het fungeren als een notatie apparaat?
Met andere woorden, als ik een Service class heb en ik verander de annotatie van @Service
naar @Component
, gedraagt deze zich dan nog hetzelfde?
Of heeft de annotatie ook invloed op het gedrag en de functionaliteit van de klasse?
1957
3
Van Spring Documentation:
Ze zijn bijna hetzelfde - ze betekenen allemaal dat de klasse een Spring bean is.
@Service
,@Repository
en@Controller
zijn gespecialiseerde@Component
s. Je kunt ervoor kiezen om specifieke acties met ze uit te voeren. Bijvoorbeeld:@Controller
bonen worden gebruikt door spring-mvc@Repository
bonen komen in aanmerking voor persistentie uitzondering vertalingIets anders is dat je de componenten semantisch toewijst aan verschillende lagen.
Een ding dat
@Component
biedt is dat je er andere annotaties mee kunt annoteren, en ze dan op dezelfde manier kunt gebruiken als@Service
.Bijvoorbeeld onlangs heb ik gemaakt:
Dus alle classes die geannoteerd zijn met
@ScheduledJob
zijn spring beans en daarnaast worden ze geregistreerd als quartz jobs. Je hoeft alleen maar code te leveren die de specifieke annotatie afhandelt.Gebruik van
@Service
en@Repository
annotaties zijn belangrijk vanuit database connectie perspectief.@Service
voor al je web service type DB connecties@Repository
voor al je stored proc DB connectiesAls je niet de juiste annotaties gebruikt, kun je te maken krijgen met commit uitzonderingen die overschreven worden door rollback transacties. U zult uitzonderingen zien tijdens stress load test die gerelateerd zijn aan roll back JDBC transacties.