我想获得Spring ApplicationContext
中的 bean 列表。特别是这些是Ordered
beans。
@Component
@Order(value=2)
我正在处理一些旧代码,它不支持Spring框架。因此,我制定了一种获取ApplicationContext
的方法。对于Spring bean,我知道可以执行以下操作:
@Bean
public SomeType someType(List<OtherType> otherTypes) {
SomeType someType = new SomeType(otherTypes);
return someType;
}
但是,
ApplicationContext
只提供了一个方法 getBeansOfType
,它返回一个无序的映射。我尝试过使用 getBeanNames(type)
,但它也返回无序的结果。我唯一能想到的办法就是创建一个虚拟类,只包含列表,为该虚拟类创建一个bean,并检索有序列表:
public class DumbOtherTypeCollection {
private final List<OtherType) otherTypes;
public DumbOtherTypeCollection(List<OtherType) otherTypes) {
this.otherTypes = otherTypes;
}
List<OtherType> getOrderedOtherTypes() { return otherTypes; }
}
@Bean
DumbOtherTypeCollection wasteOfTimeReally(List<OtherType otherTypes) {
return new DumbOtherTypeCollection(otherTypes);
}
....
applicationContext.getBean(DumbOtherTypeCollection.class).getOrderedOtherTypes();
希望自己能更出色一些。
AnnotationAwareOrderComparator
,它考虑了Order
注解。OrderComparator
仅在Ordered
接口中搜索排序值。再试一次吧:D - Alex Ciocan