Статьи

Spring @Order Аннотация

Вступление:

Аннотация Spring @Order была впервые представлена ​​в Spring 2.0. Затем он использовался только для определения порядка среди советов AspectJ. Позже, весной 4.0, реализация этой аннотации была немного улучшена. С тех пор он также поддерживает упорядочение компонентов или компонентов Spring в коллекции, такой как массив Java или List .

Эта аннотация внутренне использует класс OrderComparator для приложений на основе Spring XML и AnnotationAwareOrderComparator для приложений Spring на основе аннотаций.

В этом уроке мы рассмотрим, как использовать эту аннотацию.

Spring @Order Аннотация:

Аннотация Spring @Order принимает ровно один необязательный аргумент value , который определяет порядок компонента:

1
2
3
4
@Retention(value=RUNTIME)
@Target(value={TYPE,METHOD,FIELD})
@Documented
public @interface Order

Чем ниже значение этого аргумента, тем выше его приоритет. Другими словами, те, которые имеют меньшее значение, будут первыми в списке Java или массиве.

Значением этого аргумента по умолчанию является Упорядоченный. LOWEST_PRECEDENCE . Это означает, что отмеченный компонент имеет наименьший приоритет среди всех упорядоченных bean-компонентов. Точно так же мы можем использовать Ordered.HIGHEST_PRECEDENCE, чтобы пометить бин Spring, имеющий наивысший приоритет.

Зачем использовать?

Некоторые из распространенных вариантов использования аннотации @Order :

  • Заказ советов в AspectJ; реальное намерение, с которым оно было впервые введено
  • Когда мы хотим определить порядок загрузки наших классов CommandLineRunner или ApplicationRunner
  • Для введения списка bean-компонентов упорядоченным образом в массив Java или List
  • Определение порядка выполнения фильтра, скажем, в случае Spring Security

Пример настройки:

Допустим, у нас есть интерфейс Vehicle :

1
2
3
public interface Vehicle {
    public String getDetails();
}

И мы определяем несколько классов реализации:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@Order(1)
@Component
public class Bike implements Vehicle {
  
    public String getDetails() {
        return "Bike: 2 Wheeler";
    }
}
  
@Order(2)
@Component
public class Car implements Vehicle {
  
    public String getDetails() {
        return "Car: 4 Wheeler";
    }
}
  
@Order(3)
@Component
public class Truck implements Vehicle {
  
    public String getDetails() {
        return "Truck: 6 Wheeler";
    }
}

Здесь мы заказали все три из этих компонентов Spring. Боб Bike имеет наивысший приоритет, за ним следуют Car и наконец Truck

Тестирование нашей реализации:

Давайте быстро напишем Junit, чтобы увидеть, как все работает:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
@RunWith(SpringRunner.class)
@SpringBootTest
public class SampleAppTest {
  
    @Autowired
    private List<Vehicle> vehicles;
  
    @Test
    public void testSpringOrderAnnotation() {
        assertThat(vehicles.get(0).getDetails(), isEqual("Bike: 2 Wheeler"));
        assertThat(vehicles.get(1).getDetails(), isEqual("Car: 4 Wheeler"));
        assertThat(vehicles.get(2).getDetails(), isEqual("Truck: 6 Wheeler"));
    }
}

Очевидно, что Spring автоматически подключил наши bean-компоненты к списку Java транспортных средств на основе их приоритета.

Вывод

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

Опубликовано на Java Code Geeks с разрешения Шубхры Шриваставы, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Spring @Order Annotation

Мнения, высказанные участниками Java Code Geeks, являются их собственными.