1. 초기화 할 멤버가 하나인 경우
Construction Injection을 통해 초기화할 멤버가 하나인 경우는 아래 방식을 통해 수행하면 된다.
[Spring] Constructor Injection 기본 사용법
1. Constructor Injection 스프링 컨테이너는 bean 객체 생성시 Default 생성자를 호출하여 객체를 생성한다. 이때 기본 생성자가 아닌 매개변수를 가지는 생성자를 통해 호출하도록 할 수 있는데 이 기능
ngp9440.tistory.com
2. 초기화 할 멤버가 여러 개인 경우
만약 초기화해야할 멤버가 여러 개라면 먼저 생성자에서 해당 하는 매개변수를 모두 받아와야 한다. 만약 Car 클래스가 있다면 아래와 같이 Engine 객체와 int형 변수 seats를 가질 수 있다. 이때 Car 클래스는 다음과 같다.
public class Car {
private Engine engine;
private int seats;
public Car() {
System.out.println("생성자1로 Car 객체 생성");
}
public Car(Engine engine, int seats) {
System.out.println("생성자2로 Car 객체 생성");
this.engine = engine;
this.seats = seats;
}
public void powerOn() {
System.out.println("시동 On / "+this.seats+"명 수용");
engine.sound();
}
public void powerOff() {
System.out.println("시동 Off");
}
}
이때 xml 파일에서는 아래와 같이 <constructor-avg> 태그 2개를 사용하면 된다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="car" class="MyExam.Car">
<constructor-arg ref="engine"></constructor-arg>
<constructor-arg value="4"></constructor-arg>
</bean>
<bean id="engine" class="MyExam.EngineB"></bean>
</beans>
단, 정수형의 경우 ref가 아닌 value 속성을 사용해야 한다. 이때 생성자가 여러 개 오버로딩 되어있다면 어떤 생성자를 호출할지 분명하지 않을 수 있다. 이를 위해 index 속성을 이용해 호출되는 생성자의 인자 순서를 지정할 수 있다.
<bean id="car" class="MyExam.Car">
<constructor-arg index="0" ref="engine"></constructor-arg>
<constructor-arg index="1" value="4"></constructor-arg>
</bean>
'BackEnd > Spring' 카테고리의 다른 글
[Setter Injection] p Namespace (0) | 2023.04.28 |
---|---|
[Spring] Setter Injection 기본 사용법 (0) | 2023.04.28 |
[Construction Injection] 의존관계 변경 (0) | 2023.04.28 |
[Spring] Constructor Injection 기본 사용법 (0) | 2023.04.27 |
[Spring] IoC, DL, DI 란? (0) | 2023.04.27 |