@Bestellung im Frühjahr

1. Übersicht

In diesem Tutorial lernen wir die @ Order- Annotation von Spring kennen . Die Annotation @Order definiert die Sortierreihenfolge einer mit Annotationen versehenen Komponente oder Bean.

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

Ebenso kann der Wert Ordered.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 @Order nur für die Ausführungsreihenfolge von AspectJ verwendet. Dies bedeutet, dass der Ratschlag höchster Ordnung zuerst ausgeführt wird.

Seit Frühjahr 4.0 unterstützt es die Bestellung von injizierten Komponenten in eine Sammlung. 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 die Bewertungsoberfläche , 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 die Average- Klasse aufgrund ihres überschriebenen Werts die niedrigste Priorität hat.

4. Testen Sie unser Beispiel

Bis jetzt haben wir alle erforderlichen Komponenten und die Schnittstelle zum Testen der @ Order- Annotation erstellt. 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. Schlussfolgerung

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

Aufgrund seines Einflusses auf die Priorität der Injektion scheint es, dass es auch die Startreihenfolge der Singleton beeinflusst. Im Gegensatz dazu bestimmen die Abhängigkeitsbeziehungen und @ DependOn- Deklarationen die Singleton- Startreihenfolge .

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