이 게시글은 [인프런]스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의를 기반으로 작성되었으며 강의를 기억하기 위한 기록물입니다. 순수하게 복습하기 위한 용도로 작성되었음을 미리 밝힙니다.
컴포넌트 스캔과 자동 의존관계 설정
회원 컨트롤러가 회원 서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비하자
정형화된 패턴
- Controller: 외부 요청을 받음
- Repository: 데이터 저장
- Service: 비즈니스 로직 만들기
스프링 빈을 등록하는 2가지 방법
- 컴포넌트 스캔과 자동 의존관계 설정
- 자바 코드로 직접 스프링 빈 등록하기
⇒ 2가지 방법 모두 알아야 한다!
컴포넌트 스캔의 원리
@Component
애노테이션이 있으면 스프링 빈으로 자동 등록된다.@Controller, @Service, @Repository
애노테이션들도 @Component를 포함하고 있기 때문에 스프링 빈으로 자동 등록된다.@SpringBootApplication
이 들어있는 패키지와 그 하위에 포함된 파일들에서 컴포넌트 스캔이 이루어진다.
- 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.(생성자가 1개있으면 생략가능) ⇒ 연관관계를 만들어줌
- 이렇게 의존관계를 개발자가 직접 주입하는게 아니라, 외부(Spring)에서 주입하는것을 DI(Dependency Injection, 의존성주입)이라고 한다.
참고: 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다.
자바 코드로 직접 스프링 빈 등록하기
- DI(의존성 주입)는 필드 주입, setter 주입, 생성자 주입 3가지 방법이 있는데,
의존 관계가 실행 중 동적으로 변하는 경우는 거의 없으므로 생성자 주입을 권장한다. - 주로 정형화된 컴포넌트 스캔을 사용하지만, 정형화 되지않거나 상황에 따라 구현 클래스를 변경해야 할 경우는 설정을 통해 스프링 빈으로 등록한다.
- 해당 프로젝트는 향후 리포지토리를 다른 리포지토리로 변경한 예정이므로 스프링 빈 방식으로 설정을 한다.
'Backend > Spring' 카테고리의 다른 글
JPA vs MyBatis (0) | 2023.07.09 |
---|---|
[Spring] 회원 관리 예제 - 웹MVC 개발 (0) | 2022.07.02 |
[Spring] 회원 관리 예제 - 백엔드 개발 (0) | 2022.06.26 |
[Spring] 스프링 웹 개발 기초 (0) | 2022.06.25 |
[Spring] 프로젝트 환경설정 (0) | 2022.06.24 |
댓글