Spring 서버가 실행될 때 애플리케이션의 구성 요소를 관리하고 의존성 주입을 수행하는 스프링 컨테이너라는 것이 생성된다.
특정한 어노테이션을 사용하면 스프링 컨테이너에서 객체가 생성, 관리된다.
Spring 서버의 동작 환경은 다음 그림과 같다.

이전에 작성했던 memberService의 기능이 컨테이너에서 관리될 수 있도록 @Controller와 @Autowired 어노테이션을 사용해 컨트롤러를 작성했다.
// controller/MemberController.java
package hello.hello_spring.controller;
import hello.hello_spring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
리포지토리와 서비스도 마찬가지로 컨테이너에서 관리 될 수 있도록 어노테이션을 추가했다.
// repository/MemoryMemberRepository.java
...
import org.springframework.stereotype.Repository;
@Repository
public class MemoryMemberRepository implements MemberRepository{
...
}
// service/MemberService.java
...
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
수정한 이후에 확인을 위해 서버를 실행시켜 봤다.

성공적으로 실행이 되었으므로 컨테이너가 문제없이 생성된 것을 알 수 있다.