2013-06-06 5 views
9

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

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

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

Я пробовал реализовать интерфейс Упорядочено и происходит такое же поведение.

@Component 
public class Factory{ 


    @Autowired 
    private List<BeanInterface> list; // <- I expect a sorted list here 
    ... 
} 

Я делаю что-то неправильно?

ответ

9

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

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

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

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

+1

Это еще случай с весны 4? – Kai

0

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

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

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

Тогда вы можете сортировать список, как это:

Collections.sort(list); 
0

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

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

Смежные вопросы