목차
@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로 선언한 필드를 받으면서
주입받을 객체가 없을시 컴파일에서 에러확인이 가능하다
- 빈 생성시 주입이 같이 일어나므로 빈이 서로를 주입 받고 있는
순환 참조를 방지할 수 있다
참고
'자바 > 스프링 | 웹' 카테고리의 다른 글
스프링부트, 그래들 프로파일 (0) | 2021.02.10 |
---|---|
스프링 MVC 구조 및 동작 (0) | 2021.01.31 |
UTF-8, CharacterEncoding (0) | 2021.01.15 |
댓글