@ Commande au printemps
1. Vue d'ensemble
Dans ce didacticiel, nous allons découvrir l'annotation@Order de Spring. The @Order annotation defines the sorting order of an annotated component or bean.
Il a un argument de valeur facultatif qui détermine l'ordre du composant; la valeur par défaut estOrdered.LOWEST_PRECEDENCE. Cela indique que le composant a la priorité la plus basse parmi tous les autres composants ordonnés.
De même, la valeurOrdered.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 le plus élevé sera exécuté en premier.
Depuis Spring 4.0, il prend en charge la commande des composants injectés dans une collection. En conséquence, Spring injectera les haricots 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’interfaceRating qui détermine la note 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 classeAverage a la priorité la plus basse en raison de sa valeur remplacée.
4. Tester 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 demande de Spring en sont un exemple.
En raison de son influence sur la priorité des injections, il peut sembler que cela puisse également influer sur l'ordre de démarrage du singleton. Mais en revanche, les relations de dépendance et les déclarations@DependsOn déterminent l'ordre de démarrage des singleton.
Tous les exemples mentionnés dans ce didacticiel peuvent être trouvésover on Github.