본문 바로가기
자바/스프링 | 웹

Autowired 의존관계 주입

by 참새는 짹짹 2021. 1. 29.

@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 객체지향 온라인 강의 직접 자바 애플리케이션을 만들어가며 스프링의 핵심 원리를 이해하고, 객체 지향 설계와 스프링 컨테이너, 스프링 빈 등 스프링 백엔드 핵심 기능에 대해 학습합니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

'자바 > 스프링 | 웹' 카테고리의 다른 글

스프링부트, 그래들 프로파일  (0) 2021.02.10
스프링 MVC 구조 및 동작  (0) 2021.01.31
UTF-8, CharacterEncoding  (0) 2021.01.15

댓글