@ Поръчка през пролетта

1. Общ преглед

В този урок ще научим за анотацията @Order на Spring . В @Order анотацията определя реда на подреждане с обяснителни бележки, компонент или боб.

Той има незадължителен аргумент за стойност, който определя реда на компонента; стойността по подразбиране е Подредена.LOWEST_PRECEDENCE . Това означава, че компонентът има най-ниския приоритет сред всички други подредени компоненти.

По същия начин стойността Ordered.HIGHEST_PRECEDENCE може да се използва за заменяне на най-високия приоритет сред компонентите.

2. Кога да използвате @Order

Преди пролет 4.0 анотацията @Order се използваше само за реда за изпълнение на AspectJ. Това означава, че съветите от най-висок ред ще станат първи.

От пролет 4.0 той поддържа подреждането на инжектирани компоненти към колекция. В резултат Spring ще инжектира автоматично свързани кабели от същия тип въз основа на стойността на тяхната поръчка.

Нека да го изследваме с бърз пример.

3. Как да използвам @Order

Първо, нека настроим нашия проект със съответния интерфейс и класове.

3.1. Създаване на интерфейс

Нека създадем интерфейс за оценка, който определя рейтинга на даден продукт:

public interface Rating { int getRating(); }

3.2. Създаване на компоненти

И накрая, нека създадем три компонента, които определят рейтингите на някои продукти:

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

Обърнете внимание, че средният клас има най-ниския приоритет поради неговата отменена стойност.

4. Тестване на нашия пример

Досега създадохме всички необходими компоненти и интерфейса, за да тестваме анотацията @Order . Сега, нека го тестваме, за да потвърдим, че работи както се очаква:

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. Заключение

Научихме за анотацията @Order в тази бърза статия. Можем да намерим приложението на @Order в различни случаи на употреба - когато подреждането на автоматично свързаните компоненти има значение. Един пример са филтрите за заявки на Spring.

Поради влиянието си върху предимството на инжектиране, може да изглежда, че може да повлияе и на реда за стартиране на единичен продукт. Но за разлика от това връзките на зависимостта и декларациите @DependsOn определят реда за стартиране на единичен модел .

Всички примери, споменати в този урок, могат да бъдат намерени в Github.