Вступление:
Аннотация 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, являются их собственными. |