StudyRepository
article thumbnail
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
profile

StudyRepository

@Minseo26262

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!