@Component vs @Repository en @Service in het voorjaar

1. Inleiding

In deze korte tutorial leren we de verschillen tussen @Component, @Repository, @Service annotaties, in het Spring Framework.

2. Lente-aantekeningen

In de meeste typische toepassingen hebben we verschillende lagen, zoals gegevenstoegang, presentatie, service, bedrijf, enz.

En in elke laag hebben we verschillende bonen. Simpel gezegd, om ze automatisch te detecteren, Spring gebruikt annotaties voor het scannen van klassenpaden.

Vervolgens registreert het elke boon in het ApplicationContext.

Hier is een kort overzicht van enkele van deze annotaties:

  • @Component is een generiek stereotype voor elk onderdeel dat door Spring wordt beheerd
  • @Onderhoud annoteert klassen op de servicelaag
  • @Repository annoteert klassen op de persistentielaag, die zal fungeren als een databaserepository

We hebben al een uitgebreid artikel over deze annotaties. We zullen ons dus alleen concentreren op de verschillen tussen hen.

3. Wat is er anders?

Het belangrijkste verschil tussen deze stereotypen is dat ze worden gebruikt voor verschillende classificatie. Wanneer we een klasse annoteren voor autodetectie, moeten we het respectieve stereotype gebruiken.

Laten we ze nu in meer detail bekijken.

3.1. @Component

We kunnen @Component in de hele applicatie gebruiken om de bonen te markeren als de beheerde componenten van Spring. De lente pakt alleen bonen op en registreert ze bij @Component en zoekt niet naar @Onderhoud en @Repository over het algemeen.

Ze zijn geregistreerd in ApplicationContext omdat ze zelf zijn geannoteerd met @Component:

@Component public @interface Service {} 
@Component public @interface Repository {} 

@Onderhoud en @Repository zijn speciale gevallen van @Component. Ze zijn technisch hetzelfde, maar we gebruiken ze voor de verschillende doeleinden.

3.2. @Repository

@RepositoryHet is de taak om persistentie-specifieke uitzonderingen op te vangen en ze opnieuw te gebruiken als een van de verenigde ongecontroleerde uitzonderingen van Spring.

Voor dit voorjaar zorgt PersistenceExceptionTranslationPostProcessor, dat vereist om toe te voegen in onze toepassingscontext:

Deze bean-postprocessor voegt een adviseur toe aan elke bean met een aantekening @Repository.

3.3. @Onderhoud

We markeren bonen met @Service om aan te geven dat het de bedrijfslogica bevat. Er is dus geen andere specialiteit dan het in de servicelaag te gebruiken.

4. Conclusie

In dit artikel hebben we geleerd over de verschillen tussen @Component, @Repository, @Service annotaties. We onderzochten elke annotatie afzonderlijk met de toepassingsgebieden.

Als conclusie is het altijd een goed idee om de annotatie te kiezen op basis van hun laagconventies.