Введение

В обширной вселенной среды Spring есть одна аннотация, которую часто упускают из виду, но которая имеет большое значение, — это @Order. В проектах, где вам необходимо поддерживать определенный порядок компонентов или когда существует несколько компонентов одного типа, эта аннотация оказывается неоценимой. Этот пост прольет свет на то, как @Order можно использовать для упорядочивания компонентов и зависимостей в Spring.

Понимание аннотации @Order

Прежде чем углубляться в его использование, важно понять, что такое аннотация @Order. По сути, аннотация @Order в среде Spring помогает указать порядок bean-компонентов или компонентов. Это особенно полезно, когда у вас есть несколько bean-компонентов одного типа и вы хотите контролировать порядок их вызова или внедрения.

Использование @Order с @Bean

Одно из основных применений @Order — в сочетании с @Bean. Давайте посмотрим на простой пример:

@Configuration
public class AppConfig {

    @Bean
    @Order(2)
    public String beanOne() {
        return "Bean One";
    }

    @Bean
    @Order(1)
    public String beanTwo() {
        return "Bean Two";
    }

}

В приведенном выше примере у нас есть два компонента типа String. Если бы вы автоматически подключили список компонентов String в другой компонент, beanTwo появился бы перед beanOne из-за указанного порядка.

Заказ @Autowired коллекций

Если у вас есть сценарий, в котором существует несколько bean-компонентов одного типа, Spring позволяет автоматически объединить их как коллекцию. Аннотация @Order определяет порядок их внедрения.

Пример:

@Service
public class ServiceRunner {

    @Autowired
    private List<String> beans;

    public void printBeans() {
        beans.forEach(System.out::println);
    }
}

Когда вы вызываете метод printBeans(), он напечатает:

Bean Two
Bean One

Использование с @Component и производными

Аннотация @Order также может использоваться с @Component, @Service, @Repository и…