-
스프링 부트 - 회원 관리 예제 실습 (컴포넌트 스캔과 자동 의존관계 설정)Spring Framework 2022. 3. 23. 00:01
MemberService와 MemberRepository를 만들었습니다.
또한 테스트 코드를 통해 회원가입이 잘 동작하는 것도 테스트해 보았습니다.
이제 여기에 화면을 붙이려면 Controller와 View Template가 필요합니다.
Controller는 MemberService를 통해 회원을 추가해야 합니다.
또한 MemberService는 MemberRepository를 통해 회원의 정보를 조회하고 등록합니다.
따라서 Controller -> MemberService -> MemberRepository 의존관계가 성립합니다.
1. hello.hellospring.controller 패키지에 MemberController.java 파일 생성
package hello.hellospring.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import hello.hellospring.service.MemberService; @Controller public class MemberController { private final MemberService memberService; @Autowired public MemberController(MemberService memberService) { this.memberService = memberService; } }
@Controller 어노테이션을 통해 스프링이 스프링 컨테이너에 MemberController를 Controller로써 관리합니다.
그리고 MemberService를 사용하기 위해 객체를 만드는데 MemberService는 여러 개가 존재할 필요가 없기 때문에 스프링 컨테이너에 단 하나만 등록합니다.
MemberController 생성자를 통해 MemberService를 호출하며 @Autowired 어노테이션을 통해 스프링 컨테이너에서 MemberService를 가져옵니다.
하지만 MemberService는 순수한 Java 클래스이기 때문에 스프링이 MemberService를 알 수 없고 스프링 컨테이너에 존재하지 않습니다.
따라서 @Service 어노테이션을 MemberService에 추가합니다.
MemberRepository도 마찬가지로 순수한 Java 클래스이기 때문에 스프링 컨테이너에 존재하지 않습니다.
따라서 @Repository 어노테이션을 MemberRepository에 추가합니다.
MemberService는 MemberRepository를 의존하기 때문에 MemberSevice 생성자에도 @Autowired 어노테이션을 추가합니다.
이렇게 되면 스프링 컨테이너에 어노테이션을 통하여 Controller , MemberService, MemberRepository가 등록됩니다.
또한 @Autowired 어노테이션을 통해 Controller -> MemberService -> MemberRepository 의존관계를 만들어줍니다.
이러한 방식을 컴포넌트 스캔이라고 합니다.
컴포넌트 스캔이라고 하는 이유는 Controller, Repository, Service 어노테이션 내부에는 @Component 어노테이션이 사용됩니다.
스프링이 컴포넌트와 관련된 어노테이션이 존재하면 스프링이 객체를 생성하여 컨테이너에 등록하게 됩니다.
그러면 컴포넌트 스캔의 범위는 어디 까지일까요?
일반적으로는 main 메서드 패키지 하위 범위만 해당합니다.
또 다른 방법으로는 자바 코드로 직접 스프링 빈을 등록할 수 있습니다.
스프링 빈이란 Spring에 의하여 생성되고 관리되는 자바 객체를 Bean이라고 합니다.
다음 시간에는 자바 코드로 직접 스프링 빈을 등록해 보겠습니다.
출처
'Spring Framework' 카테고리의 다른 글
스프링 부트 - 회원 관리 예제 실습 (자바 코드로 직접 스프링 빈 등록하기) (0) 2022.04.08 인텔리제이로 스프링부트 시작하는 법 (0) 2022.03.24 [Error] Using tabs can lead to unpredictable result (0) 2022.03.04 스프링 부트 - 회원 관리 예제 실습(회원 서비스 개발) (0) 2022.02.13 스프링 부트 - 회원 관리 예제 실습(회원 도메인과 리포지토리 생성) (0) 2022.01.26