我们如何在spring中使用依赖注入动态加载特定类?
答案 0 :(得分:4)
您可以使用以下名称创建@Bean
:
@Bean(name={"airtel"})
public Operator getOperator1() {
return new Airtel();
}
@Bean(name={"idea"})
public Operator getOperator2() {
return new Idea();
}
并使用@Qualifier
@Autowired
@Qualifier("airtel")
private Operator airtel;
@Autowired
@Qualifier("idea")
private Operator idea;
答案 1 :(得分:1)
虽然汤姆塞巴斯蒂安的答案是正确的,但可以改进(我在评论栏中用尽了空间来解释改进)。
使用@Bean
时的约定是从方法名称中省略“get”。这是因为configuration classes use a method's name as the bean name。在您的@Configuration
- 带注释的类中声明bean如下:
@Bean
public Operator airtel()
{
return new Airtel();
}
@Bean
public Operator idea()
{
return new Idea();
}
根据Spring reference doc中的建议使用@Resource
而不是@Autowired
注入您的bean:
如果您打算按名称表达注释驱动的注入,请不要 主要使用
@Autowired
,即使在技术上有能力 通过@Qualifier
值引用bean名称。相反,使用 JSR-250@Resource
注释......
@Resource(name="airtel")
private Operator airtel;
@Resource(name="idea")
private Operator idea;
事实证明,此处不需要name
的{{1}} ...我将其包含在上面以演示它是如何使用的。如果字段的名称与bean的名称相同(在此示例中是@Resource
- 注释类中的方法名称),则不需要@Configuration
:
name
正如我所说,汤姆的回答是正确的;我希望通过略微更高级的细节来扩展它。