豆子的春季订购清单

我有几个实现相同接口的bean。每个豆子都标注

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

有一次,我自动连接了一个组件列表,我希望有一个排序的豆子列表。豆子列表不是根据我用注释设置的顺序排序的。

我尝试实现接口 Ordered,并发生了相同的行为。

@Component
public class Factory{


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

我做错了什么吗?


答案 1

自春季 4 起支持订购自动连线集合。

请参见: Spring 4 订购自动布线集合

摘要:如果添加 、 ...对于您的 Bean 定义,它们将被注入到根据参数排序的集合中。这与声明您希望集合按自然顺序排列不同 - 为此,您必须在收到列表后明确地对列表进行排序,如Jordi P.S.的答案所示。@Order(value=1)@Order(value=2)value


答案 2

正如你所说,我找到了这个问题的解决方案,尽管这将是一个不错的功能,但这个注释并不是为了解决这个问题。

要使其以这种方式工作,只需在包含排序列表的bean中添加以下代码即可。

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

希望它有帮助。


推荐