我想将参数传递给@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 已采纳

getBean(String,Object ...)适用于bean的构造函数或工厂方法。 您的CoreService应该具有CoreService(String)构造函数才能使用此方法。 如果要创建许多具有不同参数的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的逻辑就分开了。 使用工厂来配置原型范围内的bean非常普遍。

  ask by Amitābha translate from so

未解决问题?本站智能推荐: