[꼼꼼한 개발자] 꼼코더
07. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 스프링이 동작하면서 생기는 일 본문
Spring/코드로 배우는 스프링 웹 프로젝트
07. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 스프링이 동작하면서 생기는 일
꼼코더 2022. 12. 26. 20:30반응형
🍃 스프링이 동작하면서 생기는 일
작성한 2개의 클래스와 ‘root-context.xml’이 어떻게 동작하는지 이해하기 위해서는(이전 글 참고)
스프링과 함께 시간의 순서대로 고민해 보아야 한다.
스프링이 동작한다는 가정하에 안에서 어떤 일들이 벌어지는지 그림으로 정리하면 다음과 같이 표현할 수 있다.
🎨 그림 이야기 설명
🎅🏻 ApplicationContext : "엣헴 나는 객체들을 관리해주는 컨텍스트지, 나는 root-context.xml라는 설정 파일 기준으로 할일을 정하지!"
(코드 실행)
🎅🏻 ApplicationContext : "어디보자~(root-context.xml을 읽으며) 으흠 내가 관리할 객체는 요 두 놈인가?(Restarurant, Chef)"
(@setter, @date 등 확인)
🎅🏻 ApplicationContext : "아이구? Restarurant놈아 지금 너는 Chef놈을 필요로 한다고(의존한다고) 말하고 있는거야?? 하핳 걱정하지마 내가 문제없이 주입 시켜주마"
🎬 스프링 프레임 워크가 시작되면
- 스프링에서 사용하는 메모리 영역을 만들게 된다. 이를 콘텍스트(Context)라고 한다.
- 스프링에서는 ApplicationContext라는 이름의 객체가 만들어지게 된다.
- 스프링은 자신이 객체를 생성하고 관리해야 하는 객체들에 대한 설정이 필요하다.
- 이에 대한 설정이 ‘root-context.xml’ 파일이다.
- ‘root-context.xml’파일에 설정되어 있는 <context:component-scan> 태그를 통하여
- ‘org.zerock.sample’ 패키지를 스캔(scan)하기 시작한다.
- 해당 패키지에 있는 클래스들 중에서 스프링이 사용하는 @Component라는 어노테이션이 존재하는 클래스의 인스턴스를 생성한다.
- Restaurant 객체는 Chef 객체가 필요하다는 어노테이션(@AutoWired) 설정이 있으므로
- 스프링은 Chef 객체의 레퍼런스를 Restaurant 객체에 주입한다.
위의 그림대로 동작하는지를 테스트 하기 위해서는 직접 main 메서드를 만드는 방식도 있지만
좀 더 간편하게 테스트 코드를 작성하는 방법을 사용하는 것이 좋다.
🧹 최종 정리
- spring의 컨텍스트라는 메모리 영역이 있다.
- ‘root-context.xml’ 설정 파일을 읽어 관리하고 생성해야 하는 객체 정보를 읽는다.
- 파일을 읽을 때 <context:component-scan> 태그 기준으로 패키지를 스캔한다.
- 패키지 속 클래스 중에서 @Component라는 어노테이션이 있는 클래스의 객체를 생성(인스턴스화)한다.
- 스프링은 'Restaurant 객체는 Chef 객체가 필요하다는 뜻'에 @AutoWired로 자동주입을 알 수 있다.
'Spring > 코드로 배우는 스프링 웹 프로젝트' 카테고리의 다른 글
09. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - Lombok 관련, 테스트 관련, 스프링 어노테이션들 (0) | 2022.12.26 |
---|---|
08. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 스프링이 동작하면서 생기는 일 (0) | 2022.12.26 |
06. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 의존성 주입 테스트 (0) | 2022.12.25 |
05. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] -스프링의 주요 특징 5가지 (2) | 2022.12.25 |
04. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 스프링 프레임워크의 뚜렷한 차별성 (0) | 2022.12.25 |
Comments