[작성일: 2023. 05. 15]
컴포넌트 스캔과 자동 의존관계 설정
스프링 빈 등록하고 의존관계 설정하기
- 회원 컨트롤러가 회원서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비한다.
- Controller : MemberService를 통해서 회원가입 하고 MemberService를 통해 데이터를 조회할 수 있어야 하는데 이런 관계를 의존관계라고 한다.
MemberController
- 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.
- 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI(Dependency Injection), 의존성 주입이라고 한다.
- 이전 테스트에서는 개발자가 직접 주입했지만 이번에는 @Autowired에 의해 스프링이 주입해준다.
- @Controller를 작성해주면 MemberController 객체를 생성해서 스프링이 컨테이너에서 관리해준다.
package hello.hellospring.controller;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
오류 발생
Consider defining a bean of type 'hello.hellospring.service.MemberService' in your configuration.
- 해당 오류가 발생하는 이유는 memberSerivce가 스프링 빈으로 등록되어 있지 않기 때문이다.
- 참고: helloController는 스프링이 제공하는 컨트롤러이기 때문에 스프링 빈으로 자동 등록되었다.
- @Controller가 있으면 자동으로 등록된다.
스프링 빈을 등록하는 2가지 방법
- 컴포넌트 스캔과 자동 의존관계 설정(직접 애노테이션 작성하는 방법)
- 자바 코드로 직접 스프링 빈 등록하기
컴포넌트 스캔 원리
- @Component 애노테이션이 있으면 스프링 빈으로 자동 등록된다.
- @Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다.
- @Component를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다.
- @Controller
- @Service
- @Repository
- 참고 : 생성자에 @Autowired를 사용하면 객체 생성 시점에 스프링 컨테이너에서 해당 스프링 빈을 찾아 주입한다.
- 생성자가 1개만 있으면 @Autowired는 생략할 수 있다.
MemberService
- MemberService에서 @Service을 작성한다.
@Service
public class MemberService {
private final MemberRepository memberRepository;
...
}
MemberRepository
- MemberRepository에서 @Repository를 작성한다.
@Repository
public class MemoryMemberRepository implements MemberRepository {
...
}
스프링 빈 등록
- memberService와 memberRepository가 스프링 컨테이너에 스프링 빈으로 등록되었다.
- 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다.
- 싱글톤: 유일하게 하나만 등록해서 공유하는 디자인패턴
- 같은 스프링 빈이면 모두 같은 인스턴스이다. 설정으로 싱글톤이 아니게 설정할 수 있지만 특별한 경우를 제외하면 대부분 싱글톤을 사용한다.
🐣 출처: 인프런 김영한님 강의
이 글은 인프런의 김영한님 스프링 강의를 보고 작성한 글입니다.
강의를 들으면서 정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.