在注入bean列表时,列表中的顺序与bean的已定义顺序相同

时间:2010-12-30 21:32:51

标签: spring

@Service @Order(1)
public class FooService implements IService {..}

@Service @Order(2)
public class BarService implements IService {..}

是否保证以下列表中的订单始终为{FooService, BarService}

@Inject
private List<IService> services;

(同样的问题适用于xml配置)

2 个答案:

答案 0 :(得分:12)

我猜不是因为@Order不是通用注释。来自javadoc

  

注意:仅对特定类型的组件支持基于注释的排序,例如:对于基于注释的AspectJ方面。另一方面,Spring容器策略通常基于Ordered接口,以允许每个实例的可配置排序。

org.springframework.core.annotation.OrderAnnotationAwareOrderComparator模块的来源中也没有出现beanscontext

使其按预期运行的简单方法是:

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

答案 1 :(得分:3)

自Spring 4发布以来,@Order的使用范围已扩大到包括@Component