목차
@Autowired를 통해 의존관계(객체)를 주입하는 방법에는
크게 3가지
- 필드 주입
- setter 주입
- 생성자 주입
이 있고 각 특징은 간단하게 다음과 같다
필드 주입
@Autowired
private Item item;
- 필드를 통해 의존관계를 주입한다
장점
- 필드에 사용하면 되므로 가장 간단하고
@Autowired 외에 코드를 추가할 필요가 없다
단점
- setter 없이는 수정이나 다른 객체 주입이
불가능하며 결합성이 높아진다
setter 주입
@Autowired
public void setItem(Item item) {
this.item = item;
}
- setter 함수를 통해 의존관계를 주입한다
장점
- 추후에 따로 호출하여
다른 객체로 교체할 수 있다
단점
- 의존관계 주입이 필요한 필드마다
setter가 필요하다
생성자 주입
@Autowired
public ItemService(Item item) {
this.item = item;
}
- 생성자를 통해 의존관계를 주입한다
장점
- 객체 생성시에만 주입이 일어나므로
불변성을 보장
단점
- 필드 주입과 마찬가지로 setter 없이는 수정이
불가능하다
생성자 주입이 좋은 이유
- 필드 주입과 같이 불변성을 보장하지만
상황에 따라 다른 객체를 주입할 수 있다
- final로 선언한 필드를 받으면서
주입받을 객체가 없을시 컴파일에서 에러확인이 가능하다
- 빈 생성시 주입이 같이 일어나므로 빈이 서로를 주입 받고 있는
순환 참조를 방지할 수 있다
💡
빈을 생성하려 생성자로 갔더니 주입받을 객체가 있고
그 객체를 생성하려 생성자로 갔더니
다시 호출한 빈이 필요하다고 한다...
❗️ 순환 참조 발생
참고
스프링 핵심 원리 - 기본편 - 인프런
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 초급 프레임워크 및 라이브러리 웹 개발 서버 개발 Back-End Spring 객체지향 온라인 강의 직접 자바 애플리케이션을 만들어가며 스프링의 핵심 원리를 이해하고, 객체 지향 설계와 스프링 컨테이너, 스프링 빈 등 스프링 백엔드 핵심 기능에 대해 학습합니다.

'자바 > 스프링 | 웹' 카테고리의 다른 글
스프링부트, 그래들 프로파일 (0) | 2021.02.10 |
---|---|
스프링 MVC 구조 및 동작 (0) | 2021.01.31 |
UTF-8, CharacterEncoding (0) | 2021.01.15 |
댓글