-
[Spring] IoC 컨테이너 사용하기 (ApplicationContext 이용하기)프로그래밍 공부/Spring 2021. 4. 29. 22:49
뉴렉처 강사님의 동영상 강의를 정리한 글입니다.
Application Context
: Spring에서 설정 정보의 제공을 위한 핵심 인터페이스
지시서를 넘길 때 지시서의 위치에 따라 다른 클래스를 사용한다.
- ClassPathXmlApplicationContext: application의 root로 부터 경로를 지정할 때 => 가장 보편적인 방법
- FileSystemXmlApplicationContext: 파일 시스템의 경로를 이용할 때 (C 드라이브 ~)
- XmlWebApplicationContext: 웹의 url을 통해 경로를 지정할 때
- AnnotationConfigApplicationContext: 파일을 통해 넘기지 않고 scan을 통해 넘김
ApplicationContext context = new ClassPathXmlApplicationContext("spring/di/setting.xml");
ApplicationContext는 spring library를 직접 다운로드 하여 사용하거나,
maven 프로젝트로 생성하여 dependency를 지정하여 사용한다.
빌드 툴을 이용하는 것이 더 바람직함! (메이븐 사용)
자바 프로젝트로 생성된 프로젝트를 우클릭한 후
configure > convert to Maven Project를 이용하여 메이븐 프로젝트로 변경
여러가지 파일이 새로 생긴 것을 확인할 수 있다.
dependency를 지정하기 위해 pom.xml의 dependencies를 눌러 Add를 누른다.
여기서 검색이 안되는 이유는 인덱싱이 안되어 있기 때문이다.
Window > Show View > Other > Maven > Maven Repository > Global Repository를 우클릭 하여 Rebuild index를 한다.
이 과정이 짧게는 1시간 가량 소요되어 직접 dependency를 추가하는 방식으로 진행해보자.
maven repository 웹사이트 이동 후 spring framework 검색하여
Spring context의 최신버전 클릭 후 아래 내용을 클릭하여 복사한다.
pom.xml의 version 태그와 build 태그 사이에 dependencies 태그를 추가하여 그 안에 복사한 내용을 붙여넣는다.
파일을 저장하면 dependency가 추가된다.
이후 ApplicationContext import가 가능해진다.
ApplicationContext 사용 방법
결국 ApplicationContext를 사용하여 생성된 객체 context는 지시서의 부품들을 담는 IoC Container!
그렇다면, ApplicationContext를 이용하여 조립된 console 객체를 받아오자.
1) 객체명을 이용하여 받아오기
ExamConsole console = (ExamConsole)context.getBean("console"); //getbean([객체명]): object로 반환
object형으로 반환되기 때문에 형변환을 해주어야 한다.
2) 인터페이스에 해당하는 객체를 받아오기
ExamConsole console = context.getBean(ExamConsole.class); //getbean([인터페이스명].class): ExamConsole로 반환
ExamConsole형으로 반환되어 형변환이 필요하지 않다. 선호되는 방법!
같은 인터페이스로 선언된 여러개의 객체가 있는 경우.. 다음에 배우도록!
이렇게 지시서를 이용하여 객체를 생성하고 조립하여 넘겨준다면,
사용되는 부품이 변경되는 경우에도 코드를 수정할 필요 없이 지시서만 수정하면 된다!
Program.java
package spring.di; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import spring.di.entity.Exam; import spring.di.entity.NewlecExam; import spring.di.ui.ExamConsole; import spring.di.ui.GridExamConsole; import spring.di.ui.InlineExamConsole; public class Program { public static void main(String[] args) { //스프링에게 지시하는 방법으로 코드를 변경 // Exam exam = new NewlecExam(); // ExamConsole console = new InlineExamConsole(); // DI // // console.setExam(exam); //IoC Container ApplicationContext context = new ClassPathXmlApplicationContext("spring/di/setting.xml"); ExamConsole console = (ExamConsole)context.getBean("console"); //getbean([객체명]): object로 반환 //ExamConsole console = context.getBean(ExamConsole.class); //getbean([인터페이스명].class): ExamConsole로 반환 console.print(); } }
'프로그래밍 공부 > Spring' 카테고리의 다른 글
[Spring] 생성자 DI (0) 2021.04.29 [Spring] 값 형식 DI (0) 2021.04.29 [Spring] 스프링 DI 지시서 작성하기 (Spring Bean Configuration) (0) 2021.04.29 [JAVA] Dependency를 직접 Injection 하기 (0) 2021.04.28 [Spring] IoC 컨테이너 (0) 2021.04.28