- 스프링이 생성시, 스프링 컨테이너 통이 처음으로 생긴다.
- @Controller 표시가 되어있는 클래스는 해당 객체를 생성 및 스프링에 소위 담아둠.
=> 이 과정을 스프링 컨테이너에서 ‘스프링 빈’을 관리한다고 >함.
Q, 스프링 빈으로 자동 등록된 이유? (답): 컴포넌트 스캔 때문이다.
- MemberController 객체 생성시에 ‘스프링 빈’에 등록되어 있는 memberService 객체를 ‘스프링 컨테이너’에서 찾아서 이어주게 된다.
- ‘의존성 주입’(DI) : 이렇게 객체 의존관계를 외부에서 넣어주는 것을 말함.
1. 컴포넌트 스캔과 자동 의존관게 설정(@Component, DI)
2. 자바 코드로 직접 스프링 빈 등록하기.(다음 시간)
1. 생성자 주입 (강력추천~~)
2. 필드 주입
3. Setter 주입
단점) 누군가 해당 클래스를 호출하면 언제던 이 메소드는 public 상태를 유지해야 함.
-> 이로써 잘못 호출 및 바꾸는 실수로 문제가 생길 수 있음.
=>(2번의 장점임) 1번과 달리, 이후에 구현체 코드를 일절 손대지 않고도 다른 저장소로 바꿔치기가 가능.
=> 즉 스프링 빈으로 등록하지 않고, 내가 직접 생성한 객체라면 DI 동작하지 X..
Q. 여기서 문제 왜 기존에 index.html로 넘어가지 않고 home.html이 바로 실행될까?
=> 정적 컨텐츠의 실행 순서는 1. 입력받은 url을 스프링에서 관련 컨트롤러가 있는지 찾아봄 2. 없다면 넘기고 .static 폴더에서 있는지 찾아보게 됨.
=> 1번에서 해당 컨트롤러가 명시되어있어서 2번까지 가지 않고 바로 해당 리턴값의 경로로 실행되었기 때문에 index.html을 거치지 않은 것이다.
@GetMapping -> 데이터를 조회할 때 (조사)
@PostMapping -> 데이터를 담아서 전달, 등록할 때 (조사)
- 리턴값대로 templates 폴더의 경로로 보내줌.
- ‘뷰 리졸버’를 통해 해당 html을 띄워줌.
- 해당 html에서 입력받은 name 값이 MemberForm으로 전달받고 setName()으로 인해 저장됨.
- method=“post”타입으로 해당 컨트롤러로 보내줌
(질문?) @PostMapping 리턴값이 ‘redirect:/’ 은 뭐인가?
답: 홈화면으로 보냄
- service 내의 MemberService의 전체 멤버 조회인 findMembers()를 메소드 실행 결과를 members 객체에 넣어줌
- 이 members 객체를 model에 넘겨줌
- memberList.html이 실행
<memberList.html>