9. 스프링 빈과 의존관계 (Spring)

2023. 4. 4. 19:27·Spring
728x90

 

 

 

 

 

스프링 빈 등록하고, 의존관계 설정하기

 

 

 

저번시간엔 service를 통해 리포지토리에 회원을 저장해보았습니다. 

 

이번시간에는 회원 컨트롤러가 회원 서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비해보겠습니다.

 

 

 

 

MemberController가 MemberService를 통하여 회원을 저장할 수 있어야하고, 그 회원 데이터를 가져올 수 있어야 합니다.

 

 

그러기 위해선 컨트롤러와, 뷰 템플릿 필요합니다.

 

 

1. MemberController클래스 만들기

우선 MemberController클래스를 만들어줍니다.

 

 

2. 생성자 선언

@Controller
public class MemberController {
    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

 

 

 

생성자에 @Autowired 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어줍니다. 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency Injection), 의존성 주입이라고 합니다.

 

 

 

실행해보면 에러가 나는데

 

Parameter 0 of constructor in hello.hellospring.controller.MemberController required a bean of type 'hello.hellospring.service.MemberService' that could not be found.

 

MemberService를 찾을 수 없다고 합니다.

 

 

아까 설명했듯이 MemberController가 스프링 컨테이너에서 memberService를 찾아줘야하는데,

 

현재 코드에서 MemberService는 그냥 순수한 자바 클래스이기때문에 스프링에서 자기가 관리하고 있는 것인지 알 수가 없습니다.

 

 

때문에 MemberService클래스에 @Service를 넣어줍니다.

 

 

@Service

public class MemberService {

다음과 같이 MemberService위에 @Service를 넣어주면 스프링에서 MemberService를 Service로 인식하고 컨테이너에 저장합니다.

 

 

 

다음은 repository 구현체로 가셔서, 

@Repository
public class MemoryMemberRepository implements MemberRepository{

@Repository를 붙여주시면 됩니다. 

 

 

 

 

Controller를 통해서 외부 요청을 받고, Service에서 비지니스 로직을 만들고, Repository에서 데이터를 저장하는것은 정형화된 패턴이기때문에 알아두시면 좋습니다.

 

 

 

 

 

 

-정리-

 

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


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

 

 

 

 

 

1) 그림과 같이 Controller와 memberService를 연결해줘야 합니다.

@Controller
public class MemberController {
    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

 

@Autowired를 사용하여 MemberController가 생성이 될 때 스프링 빈에 등록되어있는 MemberService 객체를 가져옵니다.

(이걸 Defendency injection, 의존성 주입이라고 합니다.)

 

 

 

 

2) memberService는 memberRepository와 연결해줘야 합니다.

@Service
public class MemberService {
    private final MemberRepository memberRepository;
    @Autowired
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

 

MemberService를 생성할 때 애노테이션(@Service)으로 인해 스프링이 MemberService가 Service인것을 인지합니다.

 

그 후 생성자를 호출할 때 @Autowired로 인해 스프링이 memberRepository가 필요한 것을 인지하고 스프링 컨테이너에 있는 repository를 넘겨줍니다. 

 

 

 

 

-실행-

 

성공!

 

 

 

 

 

 

 

728x90

'Spring' 카테고리의 다른 글

11. 회원 관리 예제 - 웹 MVC 개발(1. 회원 등록)  (0) 2023.04.11
10. 자바 코드로 직접 스프링 빈 등록하기  (0) 2023.04.11
8. 의존성 주입(dependency injection) (Spring)  (0) 2023.04.03
7. 비즈니스 요구사항 (Spring)  (1) 2023.04.03
Intelli J 단축키  (0) 2023.04.03
'Spring' 카테고리의 다른 글
  • 11. 회원 관리 예제 - 웹 MVC 개발(1. 회원 등록)
  • 10. 자바 코드로 직접 스프링 빈 등록하기
  • 8. 의존성 주입(dependency injection) (Spring)
  • 7. 비즈니스 요구사항 (Spring)
minseououo
minseououo
    250x250
  • minseououo
    StudyRepository
    minseououo
  • 전체
    오늘
    어제
    • 분류 전체보기 (99)
      • 인버터 (5)
      • 자동차 (25)
      • 모터 (5)
      • 검증 (2)
      • Spring (46)
      • 프로젝트 (1)
      • 인공지능 (2)
      • 운영체제 (5)
      • Algorithm (2)
      • 소프트웨어공학 (5)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자동차 네트워크
    자율주행
    Spring
    토크 리플
    약계자제어
    인버터
    전류 제한원
    스프링
    AUTOSAR
    코깅 토크
    EILS
    mtpa
    dq변환
    자동차 통신
    hils 검증
    java
    ASW
    ASPICE
    MILS
    모터제어
    clarke변환
    백앤드
    자바
    ISO26262
    bsw
    PI제어
    자동차 신차 개발 프로세스
    park변환
    자동차
    SDV
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
minseououo
9. 스프링 빈과 의존관계 (Spring)
상단으로

티스토리툴바