컴포넌트 스캔과 자동 의존관계 설정
- 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency Injection), 의존성 주입이라 한다.
스프링 빈을 등록하는 2가지 방법
- 컴포넌트 스캔과 자동 의존관계 설정
- 자바 코드로 직접 스프링 빈 등록하기
컴포넌트 스캔 원리
- @Component 애노테이션이 있으면 스프링 빈으로 자동 등록된다.
- @Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴퓨넌트 스캔 때문이다.
- @Component를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다.
- @Controller
- @Service
- @Repository
자바 코드로 직접 스프링 빈 등록하기
강의에서 설명하시는 대로 코드를 작성하면 된다.
DI에는 크게 필드 주입, setter 주입, 생성자 주입의 3가지 방법이 있다.
일반적인 프로젝트에서는 조립 시점에 생성자를 한번만 호출하여 컨테이너에 스프링 빈을 등록하고, 이후에는 의존관계가 동적으로 변경되는 경우가 거의 없기 때문에 생성자 주입이 주로 권장된다.
또한, 실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다. 그리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 성정을 통해 스프링 빈으로 등록한다.
@Autowired를 통한 DI는 helloController, memberService 등과 같이 스프링이 관리하는 객체에서만 동ㅈ가한다. 스프링 빈으로 등록하지 않고 내가 직접 생성한 객체에서는 동작하지 않는다.
섹션5는 그냥 코드 작성 이외에 내용이 없어서 따로 포스트를 하지 않겠습니다.
글에서 나오는 코드와 내용은 김영한님의 인프런 스프링 입문 강의에서 가져온 것을 알립니다.
'👩🏻💻개발 > Spring' 카테고리의 다른 글
[스프링 입문] 섹션7. AOP (0) | 2023.07.27 |
---|---|
[스프링 입문] 섹션6. 스프링 DB 접근 기술 (0) | 2023.07.27 |
[스프링 입문] 섹션3. 회원 관리 예제 - 백엔드 개발 (0) | 2023.07.18 |
[스프링 입문] 섹션 2. 스프링 웹 개발 기초 (0) | 2023.07.18 |
[스프링 입문] 섹션 1. 프로젝트 환경설정 (0) | 2023.07.17 |