-
스프링 빈과 의존 관계스프링 2021. 7. 16. 20:00
김영한님의 스프링부트 강의를 듣고 작성했습니다.
스프링 빈과 스프링 컨테이너
스프링은 '스프링 빈'을 저장하는 '스프링 컨테이너'를 운용한다.
@Component 애노테이션이 있으면 스프링 빈으로 자동 등록되어 스프링에서 관리해준다.
컴포넌트 스캔
@Component 애노테이션이 있으면 스프링으로 자동 등록해주는 기능이다.
@Component를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다.
- @Controller
- @Service
- @Repository
*스프링은 스프링 컨테이너에 스프링 빈을 등록할 때 기본적으로 싱글톤으로 등록한다. 설정으로 싱글톤이 아니게 설정할 수 있지만, 특별한 경우를 제외하면 대부분 싱글톤을 이용한다.
이점
스프링 컨테이너를 사용함으로써 @Autowired 애노테이션을 사용 할 수 있다.
생성자에 @Autowired 애노테이션을 선언 할 경우, 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 의존성 주입을 자동으로 해준다.
@Configuration
@Component 애노테이션을 사용하지 않고 스프링 컨테이너에 스프링빈을 등록하려면 다음과 같이 진행하면 된다.
@Configuration을 선언해 설정파일임을 명시하고
@Bean 애노테이션을 통해 컨테이너에 스프링 빈을 등록 할 수 있다.
* 실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다. 그리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.
* 주의: @Autowired를 통한 의존성 주입은 스프링이 관리하는 객체에서만 동작한다. 스프링 빈으로 등록하지 않고 직접 생성한 객체에서는 동작하지 않는다.
의존성 주입
DI(의존성 주입)에는 필드 주입, setter 주입, 생성자 주입 이렇게 세가지가 있다. 의존 관계가 실행중에 동적으로 변하는 경우는 거의 없으므로 생성자 주입을 권장한다.
'스프링' 카테고리의 다른 글
객체 지향 원리 적용 (0) 2021.07.29 스프링과 객체지향설계 (0) 2021.07.25 테스트와 웹 애플리케이션 구조 (0) 2021.07.14 스프링 웹 개발 기초 (0) 2021.07.13 프로젝트 환경 설정 (0) 2021.07.12