我们如何在spring中使用依赖注入动态加载特定类?

时间:2015-11-18 06:53:09

标签: java spring spring-mvc dependency-injection

我们如何在spring中使用依赖注入动态加载特定类?

2 个答案:

答案 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

正如我所说,汤姆的回答是正确的;我希望通过略微更高级的细节来扩展它。