스프링 빈을 등록하고, 의존관계 설정하기
회원 컨트롤러가 회원서비스와 레포지토리를 사용할 수 있게 의존관계를 설정하자
컴포넌트 스캔
- 스프링이 시작되면 스프링 컨테이너가 생성이 된다.
- 이후 스프링이 @Componet을 사용하는 클래스들을 스캔한 후 빈형식으로 스프링 컨테이너에 올려놓다. 이를 스프링 빈을 등록한다고 한다.
- 빈을 등록하게 되면 싱글톤 형식으로 사용자가 원하는 곳에 스프링이 DI를 통해서 직접 넣어준다.
위 그림은 스프링 컨테이네어 빈(완두콩) 형식으로 Cotroller가 올라가져 있는 것을 볼 수 있는데,
이는 @Service, @Controller, @Repository의 내부에 @Componet가 있기 때문에 등록될 수 있는 것이다.
내부에 @Componet를 통해서 스캔해 등록하는 것이기 때문에 이것을 컴포넌트 스캔 방식이라고 스프링에서는 말한다.
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;
// DI를 통해서 스프링 컨테이너에서 넣어준다.
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
위 소스를 보면 생성자를 통해서 MemberService를 주입해주는 로직을 볼 수 있다.
이는 @Service의 내부에 @Componet가 선언되어 있고, Spring 컨테이너에 빈을 등록해 두었기 때문에 컨트롤러에서 Servcie를 생성하지 않고 의존성 주입을 받을 수 있는 것이다.
package hello.hellospring.service;
import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
//test case 생성 alt + enter
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
...
}
위 MeberRepository도 @Repository로 내부에 @Componet가 선언되어 있기 때문에 빈에 등록하고 사용할 수 있다.
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.springframework.stereotype.Repository;
import java.util.*;
@Repository
public class MemoryMemberRepository implements MemberRepository{
...
}
결론
스프링 컨테이너에 @Componet를 스캔하고 등록하면 위와 같이 생성자 New를 쓰지 않고 DI 의존적 주입을 통해서 싱글톤 방식으로 하나의 객채를 사용할 수 있다는 것을 알 수 있다.
이 글은 인프런의
제목 : 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강사 : 김영한 님의 동영상을 참조해 만들었습니다.
'Spring > 스프링 입문' 카테고리의 다른 글
회원 웹 기능 - 등록, 출력 (0) | 2022.03.08 |
---|---|
자바 코드로 직접 스프링 빈 등록하기 (0) | 2022.03.07 |
회원 관리 예제 - 백엔드 개발 (2) (0) | 2022.03.07 |
회원 관리 예제 - 백엔드 개발 (1) (0) | 2022.03.07 |
스플링 웹 개발 기초 - 정적 컨텐츠, MVC와 템플릿 엔진 (0) | 2022.03.06 |