Весенний упорядоченный список бобов

У меня есть несколько бинов, которые реализуют один и тот же интерфейс. Каждый боб помечен

@Component 
@Order(SORT_ORDER).
public class MyClass implements BeanInterface{
    ...
}

В какой-то момент я автоматически связываю список компонентов и ожидаю отсортированный список компонентов. Список бобов не сортируется в соответствии с порядком, который я установил с аннотацией.

Я попытался реализовать заказанный интерфейс, и то же самое поведение происходит.

@Component
public class Factory{


    @Autowired
    private List list; // 

Ответы на вопрос(4)

Существует весной вопрос об этой особенности. Я добавил в комментарий реализацию beanfactory, которую я сейчас использую для поддержки этой функции:

https://jira.springsource.org/browse/SPR-5574

Решение Вопроса

Я нашел решение проблемы, как вы говорите, эта аннотация не предназначена для этого, несмотря на то, что это было бы хорошей функцией.

Чтобы заставить его работать таким образом, просто необходимо добавить следующий код в bean-компонент, содержащий отсортированный список.

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

Надеюсь, поможет.

 Kai20 мар. 2014 г., 02:55
Это все еще в случае с Spring 4?

@Order аннотация используется для указания порядка, в котором выполняется рекомендация АОП, она неT сортировать списки. Для достижения сортировки в вашем списке есть вашBeanInterface классы реализуютсравнимый интерфейс и переопределитьcompareTo метод, чтобы указать, как объекты должны быть отсортированы. Затем вы можете отсортировать список, используяCollections.sort(list), Если предположить,BeanInterface имеет метод, называемыйgetSortOrder который возвращаетInteger объект, указывающий объект 'Порядок сортировки, вы можете сделать что-то вроде этого:

@Component 
public class MyClass implements BeanInterface, Comparable {
    public Integer getSortOrder() {
        return sortOrder;
    }

    public int compareTo(BeanInterface other) {
        return getSortOrder().compareTo(other.getSortOrder());
    }
}

Затем вы можете отсортировать список следующим образом:

Collections.sort(list);

Заказ автопровода коллекций поддерживается начиная с весны 4.

Увидеть:Spring 4 Заказ коллекций с автопроводкой

Резюме: если вы добавите,@Order(value=1)@Order(value=2)... согласно вашим определениям бинов, они будут добавлены в коллекцию, упорядоченную в соответствии сvalue параметр. Это не то же самое, что объявить, что вы хотите коллекцию вестественный порядок - для этого вы должны явным образом отсортировать список после его получения согласноДжорди П.С. 'ответ.

 Andrew Spencer31 мая 2018 г., 13:22
это полезно для многих людей, но нене ответить на актуальный вопрос. Также это 'Лучше всего поместить информацию в ответ на случай, если блог исчезнет. Я отредактировал, чтобы добавить резюме.

Ваш ответ на вопрос