백엔드/Spring

Spring - DI 지시서 작성(xml) | TIL_149

ran4 2022. 10. 3. 23:32

https://www.youtube.com/playlist?list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T

스프링 강의를 듣고 정리한 내용입니다

 


 

스프링 DI 지시서 작성하기

객체를 결합하는 방식은 크게 2가지 방식이 있다

  1. 생성자를 통해서 주입받는다
  2. setter를 통해서 주입받는다

 

 

setter를 이용하는 예시

Program 클래스 수정

public class Program {
public static void main(String[] args) {

//Entity 클래스
Exam exam = new NewlecExam();

//출력 클래스
//ExamConsole console = new InlineExamConsole(exam); //생성자로 주입
ExamConsole console = new GridExamConsole(); //setter로 주입
console.setExam(exam);
console.print();
}
}

 

 

인터페이스 ExamConsole 수정 

public interface ExamConsole {

void print();

void setExam(Exam exam); //추가된 코드
}

 

 

인터페이스를 구현하는 클래스

GridExamConsole, InlineExamConsole아래의 코드를 추가한다

@Override
public void setExam(Exam eaxm) {
this.exam = exam;
}

 

 

위의 방법은 Exam 혹은 console의 값이 변하는 경우

결합된 코드들을 수정해야하기 때문에 결합도를 낮추고 분리해야한다

-> ExamConsole 객체를 따로 설정한다

-> 스프링의 기능을 이용한다

 

 

 

스프링을 통해서 주입받도록 코드 변경하기

Program의 코드 수정

public class Program {
public static void main(String[] args) {

/* 스프링으로 주입
Exam exam = new NewlecExam();
ExamConsole console = new GridExamConsole(); //setter로 주입
console.setExam(exam);
*/

ExamConsole console = ?; 
console.print();
}
}

 

 

 

생성과 결합은 xml파일에서 한다

-> setting.xml 파일을 이용한다 

 

<bean> 태그를 이용한다 

Exam exam = new NewlecExam();

<bean id="exam" class="NewlecExam" />

클래스 명이 겹치는 경우를 고려하여 패키지 경로까지 전부 적어주는것이 좋다

<bean id="exam" class="spring.di.entity.NewlecExam" />

 

 

아래의 코드를 bean 태그로 바꾸기 (간단 실습)

ExamConsole console = new GridExamConsole();

 

더보기

<bean id="console" class="spring.di.ui.GridExamConsole" />

 

 

console.setExam(exam) 코드를 태그로 바꾸기 

- 콘솔이 exam을 갖게 만들어야 한다

-> <property> 태그를 이용한다

-> <bean> 태그 사이에 <property> 태그를 추가한다 

 

<bean id="console" class="spring.di.ui.GridExamConsole">
<property name="exam" ref="exam" />
</bean>

 

  • property를 이용한 경우 name에 set을 생략하고, 소문자로 작성해준다
  • ref와 value는 타입에 따라 선택적으로 사용한다
  • value와 ref에는 객체의 이름인 bean의 id를 넣어준다

 

▶ spring.di.entity.NewlecExam의 exam 객체는 ref형이다

-> console이 set 함수를 가지고 있어야 해당 태그를 사용하능하다

 

 

xml 파일 전체 코드 

더보기
<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-3.0.xsd">

<bean id="exam" class="spring.di.entity.NewlecExam"/>
<bean id="console" class="spring.di.ui.GridExamConsole">
<property name="exam" ref="exam" />
</bean>

</beans>

 

스프링에 위에서 작성한 지시서(xml파일)를 넘길 주체를 생성해야 한다

-> ApplicationContext를 이용하여 지시사항을 연결한다

 

'백엔드 > Spring' 카테고리의 다른 글

Spring - 값 형식 DI | TIL_151  (0) 2022.10.10
Spring - IoC 컨테이너(ApplicationContext) | TIL_150  (0) 2022.10.06
Spring - DI 실습 | TIL_148  (0) 2022.09.30
Spring 이론 - DI, IoC | TIL_147  (0) 2022.09.28
Spring 이론 | TIL_146  (0) 2022.09.26