스프링 빈 등록하고, 의존관계 설정하기
저번시간엔 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를 넘겨줍니다.
-실행-
'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 |