[SPRING] 런타임 생성자 인자를 가진 메소드에서 스프링 빈을 인스턴스화하는 방법?
SPRING런타임 생성자 인자를 가진 메소드에서 스프링 빈을 인스턴스화하는 방법?
동적으로 들어오는 매개 변수가있는 메소드에서 Bean (EmployeeSaver)을 인스턴스화해야합니다. 이 값에 대한 생성자 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을 알 수 없으므로 다음 설정을 사용할 수 없다.
<bean id="mySaverBean" class="come.saver.EmployeeSaver">
<constructor-arg name="empl" ref="employee" />
<constructor-arg name="hist" ref = "employeeHistory" />
</bean>
생성자 인수를 사용하여 employeeSaverBean을 인스턴스화하는 방법
해결법
-
==============================
1.Spring 컨피규레이션으로 직접 할 수는 없지만,이 질문에서 설명한 것처럼 ApplicationContext.getBean (String beanName, Object ... args)을 사용하면됩니다. MyEmployeeBean은 Spring의 컨텍스트에 접근하기 위해 ApplicationContextAware를 구현해야한다.
Spring 컨피규레이션으로 직접 할 수는 없지만,이 질문에서 설명한 것처럼 ApplicationContext.getBean (String beanName, Object ... args)을 사용하면됩니다. MyEmployeeBean은 Spring의 컨텍스트에 접근하기 위해 ApplicationContextAware를 구현해야한다.
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" />
addo scope = "prototype"을 기억하여 Spring이 모든 요청에 대해 새로운 인스턴스를 생성하도록하십시오.
from https://stackoverflow.com/questions/18516874/how-to-instantiate-spring-bean-with-in-a-method-with-runtime-constructor-argumen by cc-by-sa and MIT license