스프링에서의 의존성 주입은
1. 생성자를 이용한 주입
2. setter 메서드를 이용한 주입
으로 구현할 수 있다.
설정은 주로 XML이나 어노테이션을 이용해서 처리한다.
다음의 예제는 Lombok을 이용해서 setter 메서드를 자동으로 구현되도록 할 것이며, 스프링의 동작을 테스트 할것이므로
pom.xml에서 Lombok 라이브러리를 추가하고 , spring-test 라이브러리를 이용한다.
구현은 끝났고 설정으로 넘어가 본다.
여기서는 XML을 이용해서 설정을 한다.
프로젝트의 src 폴더 내에 'root-context.xml'은 스프링 프레임워크에서 관리해야 하는 객체(Bean)를 설정하는 설정파일이다.
해당 XML파일에서 네임스페이스 칸에 들어가 context를 체크
관리해야하는 객체들이 있는 패키지를 컴포낸트 스캔으로 등록한다.
빈 그래프에 들어가면 해당 객체들이 등록되어 있는 것을 확인할 수 있다.
작성한 두개의 클래스와 'root-context.xml'이 어떻게 동작하는지 이해해보자.
스프링 프레임 워크가 시작되면 먼저 스프링이 사용하는 메모리 영역을 만들게 되고 이를 Context라고 한다.
스프링에서는 ApplicationContext라는 이름의 객체가 만들어진다.
스프링은 자신이 객체를 생성하고 관리해야 하는 객체들에 대한 설정이 필요하다.
이에 대한 설정이 root-context.xml파일이다.
root-context.xml에 설정되어 있는 <context:component-scan> 태그의 내용을 통해서 'org.ayeon.sample'패키지를 스캔하기 시작한다.
해당 패키지에 있는 클래스들 중에서 스프링이 사용하는 @Component라는 어노테이션이 존재하는 클래스의 인스턴스를 생성한다.
Restaurant 객체는 Chef 객체가 필요하다는 어노테이션(@Autowired) 설정이 있으므로, 스프링은 Chef 객체의 레퍼런스를 Restuarant 객체에 주입한다.