使用自动装配将参数传递给引用

时间:2014-04-21 03:40:08

标签: java spring spring-mvc inversion-of-control

我希望将参数传递给@autowired ref,如

public CoreDao {
   private String taskId;
   private final String sql = "select ....."+getTaskId()+".....";
   public CoreDao(String taskId){
     if(taskId.length != 0){
        this.taskId = taskId;
     }else{
        this.taskId = "0";
     }
     public getTaskId(){
       return this.taskId;
    }
}

xml是:

<bean id="coreDao" class="Coredao" scope="prototype">
  <constructor-arg type="java.lang.String" value=""/>
</bean>

并且CoreService是

@service
 CoreService implement ICoreService{
  @Autowired
  pirvate CoreDao;
}

和xml是

<bean id="coreService" class="CoreService" scope="prototype">
  <property name="coreDao" ref="coreDao"/>
</bean>

我希望使用getBean(“coreService”,“123”)来获取具有coreDao动态引用的bean。 但是,当我使用getBean(“coreService”,“123”)时,例外是: 在文件.... xml中定义名称为“coreService”的bean创建错误,无法解析匹配的构造函数(提示:为简单参数指定索引/类型/名称参数以避免歧义。 怎么可能呢?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

getBean(String,Object ...)适用于bean的构造函数或工厂方法。 您的CoreService应该具有CoreService(String s)构造函数以便使用此方法。 如果要创建具有不同参数的许多CoreService实例,可以创建一个工厂bean,为您创建所有实例并将它们放在一起,如

@Component
public class CoreServiceFactoryBean {

  @Autowired ApplicationContext ctx;

  public CoreService getBean(String param) {
    CoreService coreService = ctx.getBean("coreService");
    CoreDao coreDao = ctx.getBean("coreDao", parameter);
    coreService.setCoreDao(coreDao);
    return coreService;
  }
}

这样,创建bean并使用它的逻辑仍然是分开的。使用工厂很常见的是配置原型范围的bean。