https://www.youtube.com/playlist?list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T
스프링 강의를 듣고 정리한 내용입니다
스프링 DI 지시서 작성하기
객체를 결합하는 방식은 크게 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 |