@Ordine in primavera

1. Panoramica

In questo tutorial, impareremo l' annotazione @Order di Spring . L' annotazione @Order definisce l'ordinamento di un componente o bean annotato.

Ha un argomento valore opzionale che determina l'ordine del componente; il valore predefinito è Ordered.LOWEST_PRECEDENCE . Ciò indica che il componente ha la priorità più bassa tra tutti gli altri componenti ordinati.

Allo stesso modo, il valore Ordered.HIGHEST_PRECEDENCE può essere utilizzato per sostituire la priorità più alta tra i componenti.

2. Quando utilizzare @Order

Prima di Spring 4.0, l' annotazione @Order veniva utilizzata solo per l'ordine di esecuzione AspectJ. Significa che il consiglio di ordine più elevato verrà eseguito per primo.

Dalla Spring 4.0, supporta l'ordinamento dei componenti iniettati in una raccolta. Di conseguenza, Spring inietterà i bean cablati automaticamente dello stesso tipo in base al valore dell'ordine.

Esploriamolo con un rapido esempio.

3. Come utilizzare @Order

Prima di tutto, impostiamo il nostro progetto con l'interfaccia e le classi pertinenti.

3.1. Creazione dell'interfaccia

Creiamo l' interfaccia Rating che determina la valutazione di un prodotto:

public interface Rating { int getRating(); }

3.2. Creazione di componenti

Infine, creiamo tre componenti che definiscono le valutazioni di alcuni prodotti:

@Component @Order(1) public class Excellent implements Rating { @Override public int getRating() { return 1; } } @Component @Order(2) public class Good implements Rating { @Override public int getRating() { return 2; } } @Component @Order(Ordered.LOWEST_PRECEDENCE) public class Average implements Rating { @Override public int getRating() { return 3; } }

Nota che la classe Media ha la priorità più bassa a causa del suo valore sovrascritto.

4. Testare il nostro esempio

Fino ad ora, abbiamo creato tutti i componenti richiesti e l'interfaccia per testare l' annotazione @Order . Ora, proviamolo per confermare che funziona come previsto:

public class RatingRetrieverUnitTest { @Autowired private List ratings; @Test public void givenOrder_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. conclusione

Abbiamo imparato a conoscere l' annotazione @Order in questo rapido articolo. Possiamo trovare l'applicazione di @Order in vari casi d'uso, in cui è importante l'ordine dei componenti cablati automaticamente. Un esempio sono i filtri di richiesta di Spring.

A causa della sua influenza sulla precedenza dell'iniezione, potrebbe sembrare che possa influenzare anche l'ordine di avvio singleton. Ma al contrario, le relazioni di dipendenza e le dichiarazioni @DependsOn determinano l'ordine di avvio singleton.

Tutti gli esempi menzionati in questo tutorial possono essere trovati su Github.