스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

스프링 빈과 의존관계

회원 관리 예제 - 웹 MVC 개발

스프링 DB 접근기술


스프링 빈과 의존관계

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

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

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

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

src/main/java/hello/hellospring/controller/MemberController

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;

@Controller
public class MemberController {
    private final MemberService memberService = new MemberService();
    // MemberService()에 생성자 매개변수x -> 오류
}

src/main/java/hello/hellospring/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;
    }
}

스크린샷 2022-10-02 오후 3.57.57.png


<aside> 💡 컨트롤러, 서비스, 리포지토리

</aside>

<aside> 💡 생성자에 @Autowired를 쓰면, 컨트롤러가 생성이 될 때, 스프링 빈에 등록되어 있는 memberService 객체를 가져다가 넣어준다. 이게 바로 Dependency Injection(DI, 의존관계 주입)이다.

</aside>

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


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

src/main/java/hello/hellospring/SpringConfig

package hello.hellospring;

import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
}

컴포넌트 스캔과 자동 의존관계 설정 VS 자동 코드로 직접 스프링 빈 등록하기