@Order 和 @Bean 注解的方法行为
@Order with @Bean annotated method behaviour
我的配置class:
@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 之后,您可以获得 List of Bean 按优先级排序。
@Autowired
private List<Model> models;
并且在你的方法中通过索引获取
models.get(0).getModel();
Since Spring 4.0, it supports the ordering of injected components to a collection. As a result, Spring will inject the auto-wired beans of the same type based on their order value.
我的配置class:
@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 之后,您可以获得 List of Bean 按优先级排序。
@Autowired
private List<Model> models;
并且在你的方法中通过索引获取
models.get(0).getModel();
Since Spring 4.0, it supports the ordering of injected components to a collection. As a result, Spring will inject the auto-wired beans of the same type based on their order value.