스프링/스프링 입문 - 김영한

12. 컴포넌트 스캔과 자동 의존관계 설정

서견 2023. 1. 17. 23:43

- 컴포넌트 스캔과 자동 의존관계 설정

회원 컨트롤러가 회원서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비.

컨트롤러가 서비스를 통해 회원가입 하고 서비스를 통해 조회를 할 수 있음 ( 컨트롤러가 서비스를 의존함) (의존관계)

 

@Controller : 스프링 컨테이너에 등록된 후 스프링에서 관리가 됨.

@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {

        this.memberService = memberService;
    }

@Autowired

생성자에 @Autowired 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.

이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency Injection), 의존성 주입이라 한다.

이전 테스트에서는 개발자가 직접 주입했고, 여기서는 @Autowired에 의해 스프링이 주입해준다

 

위 코드대로 실행 시 오류 발생

 

 

Service 클래스에 @ Service 를 작성 하면 스프링 컨테이너에 등록

회원 서비스 스프링 빈 등록

회원 리포지토리 스프링 빈 등록

 

컴포넌트 스캔 원리

 

@Component 애노테이션이 있으면 스프링 빈으로 자동 등록된다.

@Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다.

 

@Component 를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다.

(@Controller)

(@Service)

(@Repository)

 

스프링 빈 등록 이미지