web-dev-qa-db-fra.com

Quelle est l'utilisation de l'annotation @Order dans Spring?

Je suis tombé sur un coup d'oeil de code qui utilise l'annotation @Order. Je veux savoir à quoi sert cette annotation par rapport à Spring Security ou Spring MVC.

Voici un exemple:

@Order(1)
public class StatelessAuthenticationSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    private TokenAuthenticationService tokenAuthenticationService;

}

Qu'advient-il de l'ordre de la classe susmentionnée si nous n'utilisons pas cette annotation?

46
Qasim

Il est utilisé pour la priorité d'exécution des conseils.

Le conseil de préséance le plus élevé est le premier. Plus le nombre est bas, plus la priorité est élevée. Par exemple, si vous donnez deux conseils «avant», celui qui a la priorité la plus élevée s'exécutera en premier.

Une autre façon de l’utiliser est de commander des collections Autowired.

@Component
@Order(2)
class Toyota extends Car {
    public String getName() {
        return "Toyota";
    }
}

@Component
@Order(1)
class Mazda extends Car {
    public String getName() {
        return "Mazda";
    }
}

@Component
public class Cars {
    @Autowired
    List<Car> cars;

    public void printNames(String [] args) {

        for(Car car : cars) {
            System.out.println(car.getName())
        }
    }
}

Vous pouvez trouver le code exécutable ici: https://github.com/patrikbego/spring-order-demo.git

J'espère que cela clarifie un peu plus loin. 

Sortie: -

Mazda Toyota 

55
Patrik Bego

@Order Les annotations (ainsi que l'interface Ordered) impliquent un ordre spécifique dans lequel les beans seront chargés ou hiérarchisés par Spring.

Les chiffres plus bas indiquent une priorité plus élevée. La fonctionnalité peut être utilisée pour ajouter des beans dans un ordre à une collection (par exemple via @Autowired), entre autres choses.

Dans votre exemple spécifique, l'annotation ne change rien dans la classe elle-même. Partout où cette classe spécifique est utilisée, elle est utilisée avec la priorité la plus élevée (puisqu'elle est définie sur '1'), probablement depuis supplémentaire, mais des informations dépendantes sont ajoutées dans d'autres classes, ordonnées avec une priorité inférieure.

4
Scorpio

@Order Annotation spécifie l'ordre de chargement du bean par conteneur de printemps. abaissez l'ordre (entier), plus la priorité est haute. Donc, l'ordre de 0 aura plus de priorité que l'ordre de 10. De même, l'ordre de -100 aura plus de priorité que 0.

0
Praful Jha