[初心-Spring Boot] Bean과 의존성 주입(DI)

1. Bean이란?


Bean이란 Spring이 생명주기를 관리하는 객체이다.
이때 빈의 scope를 지정 할 수 있고 Singleton과 Proptotype으로 지정할 수 있다.
proptotype은 객체 호출시에 매번 새롭게 생성하게 된다.

2. DI란?


Defendency Injection 의존성 주입이라는 뜻이다.
Bean과 Bean 사이의 관계를 의미한다.
클래스 내부에서 Bean을 사용하게 된다면 new를 통해 객체를 생성할 필요가 없다.
객체 관리를 Spring에 위임했기 때문이다.

3. 예시코드 의존관계 설정


3-1. MemberController 생성


MemberController.java
package com.rptp.rptpSpringBoot.controller;

import com.rptp.rptpSpringBoot.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;
    }
}

@Autowired

생성자가 받는 파라미터를 자동으로 주입해준다.
의존성 주입은 setter injection, field injection, constructor injection 세 종류가 있는데 지금과 같은 경우는 constructor injection에 속한다.

다만, 이 상태로는 지금 연결을 할 수 없다. ioc 컨테이너에 memberService가 존재하지 않기 때문이다.

3-2. MemberService에 Service 에너테이션 부여


MemberService.java
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class MemberService {
    private final MemberRepository memberRepository;

    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

@Service

해당 클래스가 Service 역할로 사용됨을 알려주고 컨테이너에 저장한다.

Controller에서 에러가 사라짐을 확인할 수 있다.
이참에 Service에 Repository도 자동으로 의존성을 주입해주자!

3-3. MemberService에 MemoryMemberRepository 연결


MemberService.java
@Service
public class MemberService {
    private final MemberRepository memberRepository;

    @Autowired
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

MemberService에 Autowired를 추가해준다.

MemoryMemberRepository.java
package com.rptp.rptpSpringBoot.repository.impliment;

import org.springframework.stereotype.Repository;

import java.util.*;

@Repository
public class MemoryMemberRepository implements MemberRepository {

    private static Map<Long, MemberDTO> store = new HashMap<>();
    private static long sequence = 0L;

@Repository

해당 클래스가 Repository 역할로 사용됨을 알려주고 컨테이너에 저장한다.

참조


https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/lecture/49586
Bean이란 무엇인가 https://velog.io/@gwontaeyong/Bean%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

좋은 웹페이지 즐겨찾기