[初心-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
Author And Source
이 문제에 관하여([初心-Spring Boot] Bean과 의존성 주입(DI)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@phjppo0918/初心-Spring-Boot-Bean과-의존성-주입DI저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)