회원 컨트롤러가 회원서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비하자.
@Component
애노테이션이 있으면 스프링 빈으로 자동 등록된다.
@Controller
컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다.
@Component
를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다.
참고: 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다. 설정으로 싱글톤이 아니게 설정할 수 있지만, 특별한 경우를 제외하면 대부분 싱글톤을 사용한다.
Q. 아무데나 컴포넌트 스캔이 있어도 되나요??
-> 안됨.
각각
@Controller
@Service
@Repository
를 걸어주기.
Service에서 @Autowired
가 있으면 MemberRepository
가 필요하구나 하고 찾아준다.
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}