如何在具有运行时构造函数参数的方法中实例化Springbean?
我需要实例化一个bean(EmployeeSaver),该bean包含一个动态传入参数的方法。我无法使用构造函数setter,因为这些值在配置时未填充 示例代码:如何在具有运行时构造函数参数的方法中实例化Springbean?,spring,inversion-of-control,Spring,Inversion Of Control,我需要实例化一个bean(EmployeeSaver),该bean包含一个动态传入参数的方法。我无法使用构造函数setter,因为这些值在配置时未填充 示例代码: class MyEmployeeBean{ public void saveEmployeeDetail (Employee employee , EmployeeHistory hist ){ EmployeeDetail detail = hist.getDetail(); Empl
class MyEmployeeBean{
public void saveEmployeeDetail (Employee employee , EmployeeHistory hist ){
EmployeeDetail detail = hist.getDetail();
EmployeeSaver eSave = new EmployeeSaver(employee, detail)
saver.saveEmployee();
}
}
class EmployeeSaver {
private Employee empl;
private EmployeeDetail detail;
public EmployeeSaver(Employee emp, EmployeeDetail det){
empl = emp;
detail = det;
}
public void saveEmployee(){
// code to same the guy...
}
}
因为MyEmployeeSaver类没有默认构造函数,所以它会引发运行时异常。我无法使用以下配置,因为在我执行hist.getDetail()之前不知道employeeDetail
如何使用构造函数参数实例化employeeSaverBean 您不能直接使用Spring配置来实现这一点,而是使用
ApplicationContext.getBean(String beanName,Object…args)
如本文所述。
MyEmployeeBean
必须实现才能访问Spring的上下文
class MyEmployeeBean implements ApplicationContextAware {
ApplicationContext applicationContext;
void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public void saveEmployeeDetail (Employee employee , EmployeeHistory hist ){
EmployeeDetail detail = hist.getDetail();
EmployeeSaver eSave = (EmployeeSaver)this.applicationContextnew.getBean("mySaverBean", employee, detail);
saver.saveEmployee();
}
}
在beans.xml中
<bean id="mySaverBean" class="come.saver.EmployeeSaver" scope="prototype" />
请记住添加scope=“prototype”
,让Spring在每次请求时创建一个新实例
<bean id="mySaverBean" class="come.saver.EmployeeSaver" scope="prototype" />