@Order in het voorjaar

1. Overzicht

In deze tutorial gaan we meer leren over Spring @Bestellen annotatie. De @Bestellen annotatie definieert de sorteervolgorde van een geannoteerde component of bean.

Het heeft een optioneel waardeargument dat de volgorde van de component bepaalt; de standaardwaarde is Besteld.LOWEST_PRECEDENCE. Dit geeft aan dat de component de laagste prioriteit heeft tussen alle andere bestelde componenten.

Evenzo de waarde Besteld.HIGHEST_PRECEDENCE kan worden gebruikt om de hoogste prioriteit tussen componenten te negeren.

2. Wanneer te gebruiken @Bestellen

Vóór Spring 4.0 was het @Bestellen annotatie werd alleen gebruikt voor de AspectJ-uitvoeringsopdracht. Het betekent dat het advies van de hoogste orde als eerste wordt gegeven.

Sinds Spring 4.0 ondersteunt het de bestelling van geïnjecteerde componenten in een collectie. Als gevolg hiervan injecteert Spring de automatisch bedrade bonen van hetzelfde type op basis van hun bestelwaarde.

Laten we het verkennen met een snel voorbeeld.

3. Hoe te gebruiken @Bestellen

Laten we eerst ons project opzetten met de relevante interface en klassen.

3.1. Interface creatie

Laten we het Beoordeling interface die de beoordeling van een product bepaalt:

openbare interface Beoordeling {int getRating (); }

3.2. Componenten maken

Laten we tot slot drie componenten maken die de beoordelingen van sommige producten bepalen:

@Component @Order (1) public class Uitstekende implementaties Rating {@Override public int getRating () {return 1; }} @Component @Order (2) public class Goede implementaties Rating {@Override public int getRating () {return 2; }} @Component @Order (Ordered.LOWEST_PRECEDENCE) public class Gemiddelde implementaties Rating {@Override public int getRating () {return 3; }}

Merk op dat de Gemiddelde klasse heeft de laagste prioriteit vanwege de overschreven waarde.

4. Ons voorbeeld testen

Tot nu toe hebben we alle vereiste componenten en de interface gemaakt om het @Bestellen annotatie. Laten we het nu testen om te bevestigen dat het werkt zoals verwacht:

openbare klasse RatingRetrieverUnitTest {@Autowired privélijst beoordelingen; @Test openbare ongeldig gegevenOrder_whenInjected_thenByOrderValue () {assertThat (ratings.get (0) .getRating (), is (equalTo (1))); assertThat (ratings.get (1) .getRating (), is (equalTo (2))); assertThat (ratings.get (2) .getRating (), is (equalTo (3))); }}

5. Conclusie

We hebben geleerd over de @Bestellen annotatie in dit korte artikel. We kunnen de toepassing van vinden @Bestellen in verschillende gebruikssituaties - waarbij de volgorde van de automatisch bedrade componenten belangrijk is. Een voorbeeld hiervan zijn de verzoekfilters van Spring.

Vanwege zijn invloed op de injectieprioriteit, kan het lijken alsof het ook de opstartvolgorde van de singleton kan beïnvloeden. Maar in tegenstelling tot de afhankelijkheidsrelaties en @Hangt af van declaraties bepalen de opstartvolgorde van de singleton.

Alle voorbeelden die in deze tutorial worden genoemd, zijn te vinden op Github.