@Order和@Bean注释的方法行为

时间:2019-07-17 16:57:22

标签: java spring autowired spring-bean

我的配置类:

@Bean(name = "model")
@Order(1)
public Model model1(){
    return new Model(1);
}

@Bean(name = "model")
@Order(2)
public Model model2(){
    return new Model(2);
}

我们可以看到,这两种方法都创建了一个具有相同名称的Bean,我使用了@Order()批注将其中一个Bean赋予优先级。

不幸的是,即使我更改了Order的值以在两个带注释的Bean之间进行更改,在下面的代码中也仅使用第一个Bean

 Model bean = (Model) applicationContext.getBean("model");
 System.out.println("bean.getId() "+bean.getId());
  

bean.getId()1

我们在上下文中有两个bean吗?如果我们只有一个,那么会选择两个,为什么?

我知道我可以使用不同的名称来区分bean,但是我愿意理解@Order注释与@Bean并行工作的方式。

1 个答案:

答案 0 :(得分:1)

在Spring 4之后,您可以按优先级获得List of Bean

@Autowired
private List<Model> models;

在您的方法中按索引获取

 models.get(0).getModel();
  

从Spring 4.0开始,它支持将注入的组件排序到集合中。结果,Spring将根据它们的订单值注入相同类型的自动连线的bean。