Вступление:
Аннотация 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})@Documentedpublic@interfaceOrder | 
Чем ниже значение этого аргумента, тем выше его приоритет. Другими словами, те, которые имеют меньшее значение, будут первыми в списке Java или массиве.
Значением этого аргумента по умолчанию является Упорядоченный. LOWEST_PRECEDENCE . Это означает, что отмеченный компонент имеет наименьший приоритет среди всех упорядоченных bean-компонентов. Точно так же мы можем использовать Ordered.HIGHEST_PRECEDENCE, чтобы пометить бин Spring, имеющий наивысший приоритет.
Зачем использовать?
Некоторые из распространенных вариантов использования аннотации @Order :
- Заказ советов в AspectJ; реальное намерение, с которым оно было впервые введено
- Когда мы хотим определить порядок загрузки наших классов CommandLineRunner или ApplicationRunner
- Для введения списка bean-компонентов упорядоченным образом в массив Java или List
- Определение порядка выполнения фильтра, скажем, в случае Spring Security
Пример настройки:
Допустим, у нас есть интерфейс Vehicle :
| 1 2 3 | publicinterfaceVehicle {    publicString 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)@ComponentpublicclassBike implementsVehicle {     publicString getDetails() {        return"Bike: 2 Wheeler";    }} @Order(2)@ComponentpublicclassCar implementsVehicle {     publicString getDetails() {        return"Car: 4 Wheeler";    }} @Order(3)@ComponentpublicclassTruck implementsVehicle {     publicString 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)@SpringBootTestpublicclassSampleAppTest {     @Autowired    privateList<Vehicle> vehicles;     @Test    publicvoidtestSpringOrderAnnotation() {        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, являются их собственными. |