본문 바로가기

Spring

Spring 의존관계 주입 방법 : Constructor, Setter, Field

의존관계 주입 방법

@Autowired : 스프링이 스프링 컨테이너에 등록된 빈의 의존성을 주입해 줄 때 사용

1. 생성자 주입

최초에 한번 생성된 후 값이 변경되지 못함 = 불변

필드에 final을 유일하게 가짐 -> 유일하게 객체가 생성될 시점에 의존관계가 주입되면서 필드의 값이 생성

@Autowired
    public MyApp(MyService myService) {
        this.myService = myService;
    }

 

2. Setter 주입

변경 가능한 의존관계에 사용

@Autowired
    public void setMyService(MyService myService) {
        this.myService = myService;
    }

 

 

3. 필드 주입 (사용하지 말 것)

클래스 내부 필드에 주입, Spring없이 순수 자바 코드로는 불가능하기에 @SpringBootTest 테스트 코드에만 사용

@Component
public class MyApp {

    @Autowired
    private MyService myService;  // 필드에 직접 주입
    
}

 

의존관계 주입은 생성자 주입을 사용하자

  • 생성자 주입을 사용해야 객체 생성시 최초 한 번만 호출하게 되어 의존성을 주입한 객체가 변경될 여지가 없음
  • 테스트 코드 작성 시(순수 Java) 객체를 생성할 때, 생성자의 필드를 필수로 입력하게 되므로 실수를 방지
  • 객체 지향의 특성을 가장 잘 이용함
  • @RequiredArgsConstructor 사용할 것 ( final 붙은 필드를 모아서 생성자 주입 )

 

수동 Bean 등록을 사용하는 경우 (@Configuration에서 @Bean)

  • 외부 라이브러리나 객체를 Spring Bean으로 등록할 때 -> 자동 등록 불가
  • 데이터베이스 연결과 같이 비지니스 로직을 지원하는 기술 사용
  • 같은 타입의 Bean 여러개 중 하나를 명시적으로 선택할 때