MemberController, MemberService, MemberRepository를 각각 구현했으나 어떻게 연결관계를 이을 수 있을까 ? 여기서 스프링의 진가가 발휘된다.
생성자에 @Autowired Annotation를 넣어 스프링이 연관된 객체를 컨테이너에서 찾아서 넣어준다.
@Controller // Spring Bean으로 자동 등록
public class MemberController {
private final MemberService memberService;
@Autowired //1번
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
Service 에서도 @Service를 넣고 생성자에 @Autowired를 넣어 컨테이너에서 Spring Bean을 찾아서 주입.
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired //2번
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Autowired 1번을 통해 Controller->Service로 연결이 되었고, @Autowired 2번을 통해
Service->Repository가 연결되었다. 최종 구조도는 다음과 같다 !
현재 MemoryMemberRepository를 임시 구현 메모리객체로 만들어놓은 상황인데, 아직 DB가 정해지지 않은 상황이다. 이 때는 @Component(Controller, Repository, Service)스캔 방식대신 @Bean으로 직접 등록하여 코드 수정없이 바꿔치기가 가능하다.
추가로, Dependency Injection에는 필드주입/setter 주입/생성자 주입 이렇게 3가지가 있지만 실무에서는 생성자 주입을 많이 쓰는 편이고, 주로 컴포넌트 스캔을 사용한다고 한다.
*스프링 공부를 하면서 스프링이 뭔지, 장점은 또 뭔지에 대해 추상적으로만 개념적으로 알고 있었다.
다시 한 번 복습을 하면서 조금이나마 실루엣이 보이는 듯하다. 정진!