1. 의존성 주입 (DI)
생성자에 @Autowired 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 이렇게 객체 의존 관계를 외부에서 넣어주는 것은 DI(Dependency Injection), 의존성 주입이라 한다.

* Autowired를 사용하기 위해선 해당 클래스, 주입하려는 객체 모두 스프링 빈에 등록되어 있어야 한다.
DI에는 필드 주입, setter 주입, 생성자 주입 3가지가 있다. 위처럼 사용하는게 생성자 주입, 아래처럼 필드 앞에 @Autowired를 붙여서 사용하는게 필드 주입이다. (but 필드 주입은 권장하지 않음. 필드에 바로 주입시키므로 뭔가 변경하기가 어렵다)

setter 주입은 아래와 같다. public하게 열려 있으므로 외부에서 혹시라도 잘못 바꿀수 있다는 단점이 있다.

=> 의존관계가 실행중에 동적으로 변하는 경우는 없으므로 생성자를 통한 주입을 가장 권장!
2. 스프링 빈을 등록하는 2가지 방법
1) 컴포넌트 스캔과 자동 의존관계 설정
@Component 애노테이션이 있는 클래스는 자동으로 스프링 빈에 등록된다.
@Controller, @Service, @Repository 애노테이션 모두 @Component를 포함하고 있어서 해당 애노테이션을 가진 클래스들은 모두 스프링 빈에 등록된다.
참고로 기본적으로는 HelloSpringApplication 클래스가 있는 패키지만 자동으로 검사한다. 따라서 해당 패키지를 벗어난 클래스에는 컴포넌트 스캔을 하지 않는다.

2) 자바 코드로 직접 스프링 빈 등록하기
@Configuration 애노테이션을 가진 클래스를 생성하고, @Bean 애노테이션을 이용해 빈에 등록할 클래스들을 반환하는 메서드들을 만들어준다.


주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용,
정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다. 그러면 기존 코드를 하나도 수정하지 않고 변경이 가능하다!
참조
[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세
www.inflearn.com
'3. Back-end > 3-3. Spring - 김영한' 카테고리의 다른 글
1. 스프링 입문 - ch2. [ MVC와 템플릿 / API] (0) | 2023.09.18 |
---|