@ Bestil om foråret

1. Oversigt

I denne vejledning lærer vi om forårets @Bestille kommentar. Det @Bestille annotation definerer sorteringsrækkefølgen for en kommenteret komponent eller bønne.

Det har et valgfrit værdiargument, der bestemmer rækkefølgen af ​​komponenten; standardværdien er Bestilt.LOWEST_PRECEDENCE. Dette markerer, at komponenten har den laveste prioritet blandt alle andre bestilte komponenter.

Ligeledes værdien Bestilt.HIGHEST_PRECEDENCE kan bruges til at tilsidesætte den højeste prioritet blandt komponenter.

2. Hvornår skal du bruge det? @Bestille

Før foråret 4.0 blev den @Bestille annotering blev kun brugt til AspectJ-eksekveringsordren. Det betyder, at den højeste ordrerådgivning kører først.

Siden foråret 4.0 understøtter det bestilling af injicerede komponenter til en samling. Som et resultat vil Spring indsprøjte de auto-kablede bønner af samme type baseret på deres ordreværdi.

Lad os udforske det med et hurtigt eksempel.

3. Sådan bruges @Bestille

Lad os først og fremmest oprette vores projekt med den relevante grænseflade og klasser.

3.1. Interface Oprettelse

Lad os oprette Bedømmelse interface, der bestemmer klassificeringen af ​​et produkt:

offentlig grænseflades vurdering {int getRating (); }

3.2. Oprettelse af komponenter

Lad os endelig oprette tre komponenter, der definerer klassificeringen af ​​nogle produkter:

@Component @Order (1) offentlig klasse Fremragende implementeringer Bedømmelse {@Override public int getRating () {return 1; }} @Component @Order (2) offentlig klasse God implementering Bedømmelse {@Override public int getRating () {return 2; }} @Component @Order (Ordered.LOWEST_PRECEDENCE) offentlig klasse Gennemsnitlige implementeringer Bedømmelse {@Override public int getRating () {return 3; }}

Bemærk, at Gennemsnit klasse har den laveste prioritet på grund af dens tilsidesatte værdi.

4. Test af vores eksempel

Indtil nu har vi oprettet alle de nødvendige komponenter og grænsefladen til at teste @Bestille kommentar. Lad os nu teste det for at bekræfte, at det fungerer som forventet:

offentlig klasse RatingRetrieverUnitTest {@Autowired private List ratings; @Test offentligt ugyldigt givenOrder_whenInjected_thenByOrderValue () {assertThat (ratings.get (0) .getRating (), er (equalTo (1))); assertThat (ratings.get (1) .getRating (), er (equalTo (2))); assertThat (ratings.get (2) .getRating (), er (equalTo (3))); }}

5. Konklusion

Vi har lært om @Bestille kommentar i denne hurtige artikel. Vi kan finde anvendelsen af @Bestille i forskellige anvendelsestilfælde - hvor rækkefølgen af ​​de auto-kablede komponenter betyder noget. Et eksempel er forårets anmodningsfiltre.

På grund af dens indflydelse på injektionsprioriteten kan det virke som om det også kan påvirke startstartordren for singleton. Men derimod afhængighedsforholdene og @Afhænger af erklæringer bestemmer startordren for singleton.

Alle eksempler nævnt i denne vejledning kan findes på Github.