java - @Order 带有 @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
.
解决方案
在 Spring 4 之后,您可以获得按优先级排序的 Bean 列表。
@Autowired
private List<Model> models;
并在您的方法中按索引获取
models.get(0).getModel();
从 Spring 4.0 开始,它支持将注入的组件排序到集合中。因此,Spring 将根据它们的 order 值注入相同类型的自动连接 bean。
推荐阅读
- php - PhpStorm 中的 Foreach 循环
- python - Full name month format in QCalendar sample
- visual-studio-2017 - 如何在 cocos creator 中构建桌面(Windows 10、8.1、8)
- asp.net-core - 使用服务器端 Blazor 动态填充选择列表的问题
- asp.net - DotNet 部署流程
- mysql - 每次项目运行时,django 都会出现重复错误
- mysql - 如何解决 sum、length 和 group by 的问题
- hadoop - hadoop 运行不正常
- android - 如何每天在 sqlite 数据库中插入出勤率(可能是对或错)
- python - 从 pandas 数据帧的每一行中的单词中删除多个字符组合