我希望将参数传递给@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创建错误,无法解析匹配的构造函数(提示:为简单参数指定索引/类型/名称参数以避免歧义。 怎么可能呢?谢谢你的帮助。
答案 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。