스프링 빈과 의존관계
1. 컴포넌트 스캔과 자동 의존관계(DI, Dependency Injection) 설정
@ Controller 라는 annotation 이 있으면, 스프링이 시작될때 객체가 생성되면서 관리대상이 됨.
@ Autowired : spring 컨테이너에 있는 memberservice 를 가져다가 씀
annotationd으로 @Service, @Repository 걸어놓으면, 해당 클래스와 spring container 를 연결시켜줌.
정형화된 패턴
- controller : 컨트롤러를 통해 외부 요청을 받고,
- service : 서비스에서 비즈니스 로직을 만들고,
- repository : 리포지토리에서 데이터를 저장함.
@Autowired를 통 의존관계를 설정하는 것이 중요. (MemberController -> MemberService -> MemoryMemberRepository )
또한, Sping 컨테이너에 올라가있는 빈에서만 autowired 설정이 가능하다. (빈은 없고 화살표만 있으면 당연히 동작 X)
@Component 를 사용해서 등록도 가능하며, 이를 이용한 방법을 컴포넌트 스캔이라고 한다.
2. 자바 코드로 직접 스프링 빈 등록하기
실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다.
그리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.
회원 관리 예제 - 웹 MVC 개발
1. 회원 웹 기능 - 홈 화면 추가
Controller 내에 HomeController를 추가한 후, home.html 로 연결되도록 구성한다.
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
public String home(){
return "home";
}
}
2. 회원 웹 기능 - 등록
3. 회원 웹 기능 - 조회