스프링 빈에 등록하는 목적
스프링 컨테이너 안에 스프링 빈을 등록하여 컨트롤러가 리포지토리와 서비스를 사용할 수 있도록!
스프링 빈을 등록하는 방법
- 컴포넌트 스캔과 자동 의존관계 설정 (@Component -> @Service, @Repository...)
- 자바 코드로 직접 스프링 빈 등록
1. 컴포넌트 스캔 방식
- @Component 애노테이션 : 스프링 빈으로 자동 등록해줌
- @Controller, @Service, @Repository은 기본적으로 @Component를 포함하고 있음
- 그래서 @Controller, @Service, @Repository만 써도 스프링 빈에 등록이 됨
- 장점 : 쓰기에 편하다.
예시)
참고 : 스프링 빈에 등록하기 위해 @Component을 스캔하는 경로 범위는 실행 파일에 등록된 패키지 내에서만 스캔한다
추가 내용
- 생성자에 @Autowired를 사용하면 스프링 빈을 찾아서 주입.
- 생성자가 1개만 있으면 @Autowired는 생략 가능
- 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록
- 따라서 같은 스프링 빈이면 모두 같은 인스턴스(모두가 같이 인스턴스를 공유한다)
2. 자바 코드로 직접 등록
- 컴포넌트를 쓰지 않고 별도의 자바 클래스를 생성해주어 스프링 빈에 등록하는 방식
- @Configuration 애노테이션을 사용한다.
- 장점 : 구현 클래스를 변경해야 한다면 구현체를 바꿔치기하기 좋다 (다른 곳에 손대지 않고 설정 파일만 바꾸면 됨)
예시)
추가 내용
- 필드 주입, setter 주입, 생성자 주입 3가지 방법이 있지만 의존관계가 동적으로 변하는 경우는 없으므로 그냥 생성자 주입 방식을 쓰자!
- @Autowired는 당연하게도 스프링 빈에 등록되지 않았다면 동작하지 않는다.
이곳에 작성한 내용은 인프런에서 서비스하는 강의 중 김영한님의 스프링 강의를 정리하고 저의 언어로 기억하고 싶은 것을 정리한 내용입니다. 아래에 출처를 남겨두겠습니다.
https://www.inflearn.com/roadmaps/373
'Spring' 카테고리의 다른 글
[Spring] 스프링 AOP 개념, 실행 과정(프록시 생성, 의존관계 변경) (0) | 2022.01.20 |
---|---|
[Spring] 스프링 DB 접근 및 테스트, JPA (데이터베이스, 테스트코드, JPA, 스프링 데이터 JPA) (0) | 2022.01.20 |
[Spring] 스프링 기본적인 백엔드 개발 예제 및 테스트 (기본적인 구조, 간단한 테스트 케이스 작성) (0) | 2022.01.17 |
[Spring] 스프링 웹 개발의 기본 동작 원리, 개발방법 (정적, MVC, API) (0) | 2022.01.16 |