2014-02-17 3 views
0

나는 봄 콩을 가지고있다.프로그래밍 방식으로 스프링 빈에 값을 전달 하시겠습니까?

public class Employee2 { 

    private int id; 
    private String name; 
    private double salary; 


    public Employee2(int id, String name, double salary) { 
    this.id = id; 
    this.name = name; 
    this.salary = salary; 
    } 

// some logic to call database using above values 

} 

이제 스프링 구성 파일에 다음과 같은 설정이 있습니다.

<bean id="emp2" class="com.basic.Employee2"> 
      <constructor-arg name="id" value="" /> 
      <constructor-arg name="name" value="" /> 
      <constructor-arg name="salary" value="" /> 
</bean> 

동적이기 때문에 위의 설정 값을 하드 코딩 할 수 없습니다.

이제 스프링 빈을 프로그래밍 방식으로 아래 코드를 사용하여 가져옵니다.

Employee2 emp = (Employee2)applicationContext.getBean("emp2"); 

지금 어떻게 Employee2 생성자에 값을 전달할 수 있습니다?

감사합니다.

+0

당신은 스프링 컨텍스트의 개념을 검토 할 필요가있다. 빈은 컨텍스트 로딩 중에 Spring에 의해 생성자가 호출된다는 것을 의미하는 봄 컨텍스트에서 시작되고 저장 될 것입니다. 클래스 인스턴스의 생성자가 이미 생성 되었기 때문에 생성자를 호출 할 수 없습니다. – Jaiwo99

+0

인스턴스는 지연로드로 나중에 생성 할 수 있습니다. 여기서 \t getBean (String name, Object ... args)을보십시오. http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/BeanFactory.html – pasha701

+0

파샤, 어떤 exmple을 주시겠습니까? – user755806

답변

0

빈 조회를 수행 할 때. 대신 varargs getBean 메소드를 사용하여 생성자에 인수를 보내십시오.

그래서 이런 식으로 뭔가를 시도 :

Employee2 emp = (Employee2)applicationContext.getBean("emp2", "someid", "somename", "somesalaray"); 
+0

trappski, 답변 해 주셔서 감사합니다. 스프링 파일의 생성자 구성을 그대로 유지할 수 있습니까? 감사! – user755806

+0

trappski, 프로토 타입 범위에서만 작동합니까? – user755806

+0

프로토 타입 범위 내에서만 시도 했으므로 잘 모르겠습니다. 아마도 구성을 yes로 유지할 수 있습니다. getBean() 호출은 정의의 모든 값을 대체합니다. 심지어 인자를 사용하지 않고 bean을 정의하더라도 작동합니다 : 예 : trappski

관련 문제