1. 생성자 주입 방식
- 생성자를 통해서 의존 관계를 주입받는 방법이다.
- 생성자에 @Autowired를 하면 스프링 컨테이너에 @Component로 등록된 빈에서 생성자에 필요한 빈들을 주입한다.
- 스프링 공식 문서에서 권장하고 있는 방식.
- 특징
- 생성자 호출 시점에 1번만 호출되는 것을 보장한다.
- 불변과 필수 의존 관계에 사용한다.
- 생성자가 1개만 존재하는 경우 @Autowired를 생략해도 자동 주입된다.
- NPE(NullPointerException)를 방지할 수 있다.
- 주입받은 필드를 final로 선언 가능하다.
- ※ 생성자 주입을 사용해야 하는 이유 ※
- 객체의 불변성 확보
- 테스트 코드의 작성
- final 키워드 작성 및 Lombok과의 결합
- 특징
2. 수정자 주입 방식
- setter라 불리는, 필드의 값을 변경하는 수정자 메소드를 통해서 의존 관계를 주입하는 방법이다.
- @Component를 통해 실행하는 클래스를 스프링 빈으로 등록하고 의존 관계를 주입하게 된다.
- @Autowired가 있는 수정자들을 자동으로 의존 관계를 주입한다.
- 특징
- 선택과 변경 가능성이 있는 의존 관계에 사용한다.
- But) 실제로 변경이 필요한 경우는 극히 드물다.
- 자바 빈 프로퍼티 규약의 수정자 메소드 방식을 사용하는 방법이다.
- set필드명 메소드를 생성하여 의존 관계를 주입한다.
- @Autowired를 입력하지 않으면 실행이 되지 않는다.
- 선택과 변경 가능성이 있는 의존 관계에 사용한다.
- 특징
3. 필드 주입 방식
- 필드에 @Autowired를 붙여서 바로 주입하는 방법이다.
- 특징
- 코드가 간결해진다.
- 단, 외부에서 접근이 불가능하여 테스트하기 어려운 단점이 있다.
- DI 프레임워크가 없으면 아무것도 할 수 없다.
- 애플리케이션의 실제 코드와 상관없는 특정 테스트를 하고 싶을 때 사용한다.
- 특징
반응형
'개발자 기술 면접 > Spring' 카테고리의 다른 글
[Spring] AOP(Aspect Oriented Programming)란? (0) | 2024.01.02 |
---|---|
[Spring] 필터(Filter)와 인터셉터(Interceptor)의 차이 (0) | 2023.12.28 |
[Spring] 디스패처 서블릿(Dispatcher Servlet)이란? (0) | 2023.12.27 |
[Spring] DI(Dependency Injection), 의존성 주입이란? (0) | 2023.12.27 |
[Spring] IoC(Inversion of Control)란? (2) | 2023.12.27 |