提问者:小点点

@使用@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());

豆子。getId()1

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

我知道我可以使用不同的名称来区分bean,但我愿意了解@order注释如何与@Bean并行工作。


共1个答案

匿名用户

Spring 4之后,您可以获得按优先级排序的Bean列表。

@Autowired
private List<Model> models;

在你的方法中通过索引获取

 models.get(0).getModel();

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