스프링 Spring/스프링 입문

[스프링 빈과 의존관계] 컴포넌트 스캔과 자동 의존관계 설정

코딩개발 2022. 1. 15. 20:04
728x90
반응형

@Controller : 스프링이 @Controller의 객체를 생성해서 들고 있다.

다른 말로 스프링 컨테이너에서 스프링 빈이 관리된다 라고 함

 

@Controller
public class MemberController {

//    private final MemberService memberService = new MemberService();
    private final MemberService memberService;
    // 여러 인스턴스를 생성할 필요가 없고 하나만 만들어 공유해서 쓰면 된다.
    // 스프링 컨테이너에 등록하여 사용한면 된다.

    // @Autowired를 생성자에 쓰면 MemberController가 생성될때,
    // 스프링 빈으로 등록되어 있는 MemberService를 넣어준다.(의존관계 주입)
    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

 

결과

 

 

MemberService는 순수 자바 코드

 

해결 방법 : 스프링 빈 등록

1. @Service 추가

public class MemberService {

    private final MemberRepository memberRepository;

    // MemberService를 스프링 컨테이너에 등록하면서 이 생성자 호출,
    // @Autowired가 있으면 스피링 컨테이너에 있는 MemberRepository를 넣어준다.
    @Autowired
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

 

2. @Repository 추가

@Repository
public class MemoryMemberRepository implements MemberRepository {

 

스프링 빈 등록

Controller를 통해 외부 요청을 받고, Service 에서 비즈니스 로직을 만들고, Repository에서 데이터를 저장한다.

 

 

스프링 빈을 등록하는 2가지 방법

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

@Controller, @Service, @Repository 를 보면 안에 @Component가 있다.

스프링이 올라올때 @Component 가 있는 것은 스프링이 객체를 하나씩 다 생성하고 스프링 컨테이너에 등록을 한다.

즉, @Component가 있으면 스프링 빈으로 자동 등록된다.

@Autowired은 위 그림에서 선을(연관관계) 연결하는 역할

 

2. 자바 코드로 직접 스프링 빈 등록하기

 

 

 


<출처>

인프런 강의 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술"을 정리한 것 입니다.

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

www.inflearn.com

 
728x90
반응형