如何在具有运行时构造函数参数的方法中实例化Springbean?

如何在具有运行时构造函数参数的方法中实例化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

我需要实例化一个bean(EmployeeSaver),该bean包含一个动态传入参数的方法。我无法使用构造函数setter,因为这些值在配置时未填充

示例代码:

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" />