@Order au printemps

1. Vue d'ensemble

Dans ce tutoriel, nous allons en apprendre davantage sur l' annotation @Order de Spring . L' annotation @Order définit l'ordre de tri d'un composant ou d'un bean annoté.

Il a un argument de valeur facultatif qui détermine l'ordre du composant; la valeur par défaut est Ordered.LOWEST_PRECEDENCE . Cela indique que le composant a la priorité la plus basse parmi tous les autres composants commandés.

De même, la valeur Ordered.HIGHEST_PRECEDENCE peut être utilisée pour remplacer la priorité la plus élevée parmi les composants.

2. Quand utiliser @Order

Avant Spring 4.0, l' annotation @Order était utilisée uniquement pour l'ordre d'exécution AspectJ. Cela signifie que le conseil d'ordre le plus élevé sera exécuté en premier.

Depuis Spring 4.0, il prend en charge l'ordre des composants injectés dans une collection. En conséquence, Spring injectera les beans auto-câblés du même type en fonction de leur valeur de commande.

Explorons-le avec un exemple rapide.

3. Comment utiliser @Order

Tout d'abord, configurons notre projet avec l'interface et les classes appropriées.

3.1. Création d'interface

Créons l' interface de notation qui détermine la notation d'un produit:

public interface Rating { int getRating(); }

3.2. Création de composants

Enfin, créons trois composants qui définissent les notes de certains produits:

@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; } }

Notez que la classe Average a la priorité la plus basse en raison de sa valeur remplacée.

4. Test de notre exemple

Jusqu'à présent, nous avons créé tous les composants requis et l'interface pour tester l' annotation @Order . Maintenant, testons-le pour confirmer qu'il fonctionne comme prévu:

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. Conclusion

Nous avons découvert l' annotation @Order dans cet article rapide. Nous pouvons trouver l'application de @Order dans divers cas d'utilisation - où l'ordre des composants auto-câblés est important. Les filtres de requête de Spring en sont un exemple.

En raison de son influence sur la priorité d'injection, il peut sembler que cela pourrait également influencer l'ordre de démarrage des singleton. Mais en revanche, les relations de dépendance et les déclarations @DependsOn déterminent l'ordre de démarrage du singleton.

Tous les exemples mentionnés dans ce tutoriel peuvent être trouvés sur Github.