Spring订购了豆类清单

Jor*_*.S. 12 java sorting spring spring-mvc ioc-container

我有几个bean实现相同的接口.每个bean都注明了

@Component 
@Order(SORT_ORDER).
public class MyClass implements BeanInterface{
    ...
}
Run Code Online (Sandbox Code Playgroud)

有一次我自动装配了一个组件列表,我期待一个排序的bean列表.bean的列表没有按照我用注释设置的顺序排序.

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

@Component
public class Factory{


    @Autowired
    private List<BeanInterface> list; // <- I expect a sorted list here
    ...
}
Run Code Online (Sandbox Code Playgroud)

我做错了吗?

rub*_*nsa 16

从Spring 4开始,支持订购自动装配的集合.

请参阅:Spring 4订购自动收集的集合

总结:如果你添加@Order(value=1),@Order(value=2)......你的bean定义,他们将按照有序集合中注入value参数.这与声明您希望收集按自然顺序不同 - 因为根据Jordi PS的回答,您必须在收到后自己明确地对列表进行排序.


Jor*_*.S. 14

我找到了解决这个问题的方法,正如你所说,这个注释并不适用于它,尽管它是一个很好的功能.

为了使它以这种方式工作,它只需要在包含排序列表的bean中添加以下代码.

@PostConstruct
public void init() {
    Collections.sort(list,AnnotationAwareOrderComparator.INSTANCE);
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

  • Spring 4还是这样吗? (2认同)