Рубрики
Без рубрики

@Заказать весной

Краткий обзор аннотации @Order Spring с простым примером

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы узнаем об аннотации Spring @Order . Аннотация @Order определяет порядок сортировки аннотированного компонента или компонента.

Он имеет необязательный аргумент value, который определяет порядок компонента; значение по умолчанию – Ordered.LOWEST_PRECEDENCE . Это означает, что компонент имеет самый низкий приоритет среди всех других упорядоченных компонентов.

Аналогично, значение Упорядочено.HIGHEST_PRECEDENCE может использоваться для переопределения самого высокого приоритета среди компонентов.

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

До Spring 4.0 аннотация @Order использовалась только для заказа на выполнение AspectJ. Это означает, что совет высшего порядка будет работать первым.

Начиная с Spring 4.0, он поддерживает упорядочение введенных компонентов в коллекцию. В результате Spring введет автоматически подключенные бобы того же типа на основе их значения заказа.

Давайте рассмотрим это на коротком примере.

3. Как использовать @Order

Прежде всего, давайте настроим ваш проект с соответствующим интерфейсом и классами.

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

Давайте создадим интерфейс Rating , который определяет рейтинг продукта:

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

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

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 .