我的配置类:
@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
并行工作的方式。
答案 0 :(得分:1)
在Spring 4之后,您可以按优先级获得List of Bean。
@Autowired
private List<Model> models;
在您的方法中按索引获取
models.get(0).getModel();
从Spring 4.0开始,它支持将注入的组件排序到集合中。结果,Spring将根据它们的订单值注入相同类型的自动连线的bean。