- 컴포넌트 스캔과 자동 의존관계 설정
- 자바 코드로 직접 스프링 빈 등록하기
스프링 빈으로 등록해서 사용하면 장점(AOP 등)이 많음.
화면을 붙이기 위해 Controller와 뷰 템플릿이 필요하다.
Controller는 Service를 이용해서 Repository 에 데이터를 입력/조회
다시 말해, Controller가 Service를 의존한다. (의존관계가 있다)
회원 컨트롤러가 회원서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비한다.
Controller -> Service -> Repository
서비스에서 사용하는 객체를 new로 생성하지 않고
Spring 컨테이너에 등록하고 하나만 생성해서 공용으로 사용하도록 한다.
@Autowired
생성자
생성자에 @Autowired 를 사용하면 스프링이 객체 생성 시점에 스프링 컨테이너에서 해당 스프링 빈을 찾아서 주입한다(넣어준다).
이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency Injection, 의존성 주입)이라 한다.
참고: 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다.
의존관계가 실행중(런타임)에 동적으로 변하는 경우는 거의 없으므로 생성자 주입을 권장한다.
실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다.
그리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.
MemoryMemberRepository를 다른 영향 없이 다른 구현클래스로 바꿔치기 할 수 있게 해준다.
예) MemoryMemberRepository -> DbMemberRepository를