회원 컨트롤러가 회원 서비스와 회원 리포지토리를 사용할 수 있게 의존 관계 (멤버 컨트롤러가 멤버 서비스를 통해서 회원 가입, 데이터 조회 등을 할 수 있게 함)를 준비.
회원 컨트롤러에 의존 관계 추가
package hello.hellospring.controller;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
/* @Controller
public class MemberController {
// 기능은 없지만, 스프링 컨테이너라는 스프링 통에 MemberController 객체를 생성해서 스프링에 넣어두고 관리 (스프링 빈이 관리된다.)
} */
@Controller
public class MemberController {
// 멤버서비스를 가져다 쓰기 위해서 new로 가져옴
// private final MemberService memberService = new MemberService();
// 하지만, 스프링이 관리하게 되면 모두 스프링 컨테이너에 등록하고 스프링 컨테이너를 통해서 사용하게 해야 한다.
// 해결 방안
private final MemberService memberService;
@Autowired // memberService를 스프링이 스프링 컨테이너에 있는 memberService를 가져다 연결 해준다.(Dependency Injection)
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
// 오류발생 : 'hello.hellospring.service.MemberService' that could not be found.
// 해결 : MemberSerivce가 순수한 자바 코드 여서 생긴 문제 => MemberService에 @Service 달아 주기, MemoryMemberRepository에 @Repository 달아 주기
}
@Autowired
가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어줌, 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI(Dependency Injection), 의존성 주입이라 함@Autowired
에 의해 스프링이 주입 해줌오류발생
Consider defining a bean of type 'hello.hellospring.service.MemberService' in
your configuration
memberService가 스프링 빈으로 등록 되어 있지 않음.
참고 : helloController는 스프링이 제공하는 컨트롤러여서 스프링 빈으로 자동 등록 된다.
@Controller
가 있으면 자동 등록
스프링 빈을 등록하는 2가지 방법