[꼼꼼한 개발자] 꼼코더

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로 자동주입을 알 수 있다.

 

 

 

 

 

 

 
Comments