Подтвердить что ты не робот

При вводе списка beans, порядок в списке такой же, как определенный порядок beans

@Service @Order(1)
public class FooService implements IService {..}

@Service @Order(2)
public class BarService implements IService {..}

Гарантируется, что порядок в следующем списке всегда будет {FooService, BarService}:

@Inject
private List<IService> services;

(тот же вопрос касается xml config)

4b9b3361

Ответ 1

Я думаю, нет, потому что @Order не является аннотацией общего назначения. Из javadoc:

ПРИМЕЧАНИЕ. Заказ на основе аннотаций поддерживается только для определенных видов компонентов, например. для аннотационных аспектов AspectJ. Spring стратегии контейнеров, с другой стороны, обычно основаны на интерфейсе Ordered, чтобы разрешить конфигурируемое упорядочение каждого экземпляра.

Также нет источников org.springframework.core.annotation.Order и AnnotationAwareOrderComparator в источнике модулей beans и context.

Простой способ заставить это вести себя как ожидалось:

@PostConstruct
public void init() {
    Collections.sort(services, AnnotationAwareOrderComparator.INSTANCE);
}

Ответ 2

Начиная с выпуска Spring 4, использование @Order было расширено, включив @Component