이전 시간에는 Setter를 통한 DI를 알아보았고 오늘은 Constructor, 즉 생성자 DI에 대해서 알아보자.
예를들어 Exam exam = new NewlecExam(10,10,10,10);를 XML로 나타내려면 우선 객체의 클래스에 생성자를 생성해야한다.
빈칸 마우스 우측 클릭 -> Source -> Generate Consructor using Fields... -> (Fields의 모든 속성 체크) -> Generate
package spring.di.entity;
public class NewlecExam implements Exam {
private int kor;
private int eng;
private int math;
private int com;
public NewlecExam() { // 기본생성자를 명시해주지 않으면 p namespece를 사용할 때 오류 발생
}
public NewlecExam(int kor, int eng, int math, int com) {
this.kor = kor;
this.eng = eng;
this.math = math;
this.com = com;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getCom() {
return com;
}
public void setCom(int com) {
this.com = com;
}
@Override
public int total() {
return kor+eng+math+com;
}
@Override
public float avg() {
return total() / 4.0f;
}
}
XML 파일에서 bean 정의를 통해 생성자 DI를 설정하는 방법에는 아래 그림과 같이 3가지 방법이 존재한다.
1.단순히 value 속성만을 사용하여 생성자의 매개변수 순서에 따라 값이 매칭되는 첫 번째 방법
2.index 속성을 사용하여 순서를 지정해주는 두 번째 방법
3.name 속성을 사용하여 생성자 매개변수 이름을 명시적으로 지정해 주는 세 번째 방법(type까지 지정해 줄 수도 있음.)
위의 방법들이 너무 속성들이 많고 번잡해 보이면 네임 스페이스를 사용하는 방법이 있다.
P 네임스페이스(p:namespace)를 사용하여 bean 객체를 설정할 때 보다 간결하게 정의할 수 있다.
- 네임스페이스 정의: xmlns:p="http://www.springframework.org/schema/p" 추가
- P 네임스페이스를 사용한 주입: <bean> 태그 내부에서 p:로 시작하는 속성을 통해 객체의 생성자 매개변수나 속성을 직접 설정
참고자료
'🖥️ Backend > Spring' 카테고리의 다른 글
[Spring] 12.@Autowired (0) | 2024.12.30 |
---|---|
[Spring] 11.Collection DI (0) | 2024.12.27 |
[Spring] 9.Setter DI(value타입) (1) | 2024.11.08 |
[Spring] 8.스프링 IoC 컨테이너 사용하기(ApplicationContext 이용하기) (1) | 2024.11.06 |
[Spring] 7.Setter DI(ref타입) (0) | 2024.10.20 |