@Order im Frühling

@Bestellung im Frühling

1. Überblick

In diesem Tutorial erfahren Sie mehr über die@Order-Anmerkung von Spring. The @Order annotation defines the sorting order of an annotated component or bean.

Es verfügt über ein optionales Wertargument, das die Reihenfolge der Komponente bestimmt. Der Standardwert istOrdered.LOWEST_PRECEDENCE. Dies markiert, dass die Komponente die niedrigste Priorität unter allen anderen bestellten Komponenten hat.

In ähnlicher Weise kann der WertOrdered.HIGHEST_PRECEDENCE zum Überschreiben der höchsten Priorität unter den Komponenten verwendet werden.

2. Wann wird@Order verwendet?

Vor Spring 4.0 wurde die Annotation@Ordernur für die Ausführungsreihenfolge von AspectJ verwendet. Dies bedeutet, dass die Beratung auf höchster Ebene zuerst ausgeführt wird.

Seit Spring 4.0 wird die Bestellung eingespritzter Komponenten für eine Sammlung unterstützt. Infolgedessen injiziert Spring die automatisch verdrahteten Bohnen desselben Typs basierend auf ihrem Bestellwert.

Lassen Sie es uns anhand eines kurzen Beispiels untersuchen.

3. Verwendung von@Order

Lassen Sie uns zunächst unser Projekt mit der entsprechenden Schnittstelle und den entsprechenden Klassen einrichten.

3.1. Schnittstellenerstellung

Erstellen wir dieRating-Schnittstelle, die die Bewertung eines Produkts bestimmt:

public interface Rating {
    int getRating();
}

3.2. Komponentenerstellung

Lassen Sie uns abschließend drei Komponenten erstellen, die die Bewertungen einiger Produkte definieren:

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

Beachten Sie, dass dieAverage -Klasse aufgrund ihres überschriebenen Werts die niedrigste Priorität hat.

4. Testen Sie unser Beispiel

Bisher haben wir alle erforderlichen Komponenten und die Schnittstelle zum Testen der Annotation von@Ordererstellt. Testen wir es nun, um zu bestätigen, dass es wie erwartet funktioniert:

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

In diesem kurzen Artikel haben wir die Annotation von@Orderkennengelernt. Wir können die Anwendung von@Order in verschiedenen Anwendungsfällen finden - wo die Reihenfolge der automatisch verdrahteten Komponenten von Bedeutung ist. Ein Beispiel sind die Anforderungsfilter des Frühlings.

Aufgrund seines Einflusses auf die Priorität der Injektion kann es so aussehen, als ob er auch die Startreihenfolge des Singleton beeinflusst. Im Gegensatz dazu bestimmen die Abhängigkeitsbeziehungen und@DependsOn -Deklarationen die Singleton-Startreihenfolge.

Alle in diesem Tutorial erwähnten Beispiele finden Sie inover on Github.