Spring [핵심] 다양한 의존관계 주입 방법

신재원·2023년 1월 10일
1

Spring 핵심

목록 보기
15/19

다양한 의존관계 주입 방법

  • 의존관계 주입은 크게 4가지 방법이 있다. ( 당연한 소리지만, 스프링 빈으로 등록된 클래스여야 가능 )

    • 생성자 주입 (제일 자주 쓰임)

      • 생성자를 통해서 의존 관계를 주입 받는 방법
      • @Autowired, "불변" "필수" 의존관계에 사용, 생성자 호출시점에 딱 "1번만" 호출되는것을 보장
    • 수정자 주입(setter 주입)

      • setter라 불리는 메서드를 통해서 의존관계 주입
      • 선택 , 변경 가능성이 있는 의존관계에 사용
    • 필드 주입 (사용 X)

      • 외부에서 변경이 불가능해 테스트가 힘들다는 치명적 단점 존재
      • DI 프레임 워크가 없으면 아무것도 할수 없다.
    • 일반 메서드 주입

      • 일반 메서드를 통해 주입
      • 한번에 여러 필드를 주입 받는다.
      • 일반적으로 사용 X

옵션 처리

  • @Autowired(required = false)

  • required = true가 기본값임, required = true로 하면 예외가 터짐

  • 자동 주입할 대상이 없으면 메서드 자체가 호출 X

    • (이유 :스프링빈에 등록되어있지 않기때문)
  • @Nullable 어노테이션 : null을 허용할 경우 null 반환

  • Optional<> : null 일경우 empty 반환

생성자 주입을 선택해라 !

  • "불변"

  • 수정자 주입 (setter) 을 사용하면 메서드를 public으로 열어두어야함 -> 호출해서 변경이 가능

  • 생성자 주입을 사용하면 필드에 "final" 키워드를 사용해 생성자에서 값이 설정되지 않는 오류를 컴파일 시점에 막아준다.

롬복(Lombok)과 최신 트랜드

  • 생성자 만들어야하고, 주입 받은 값을 대입하는 코드도 만들어야한다

    • 해결 : @Lombok 적용
  • @RequiredArgsConstructor : final이 붙은 필드값의 생성자를 자동으로 만들어준다.

    • 실제 클래스코드 ( ctrl + f12)를 눌러보면 롬복에 의해 생성자가 생성된것을 확인

조회 빈이 2개 이상일경우

  • 타입으로 조회 하기 때문에 선택된 빈이 2개이상일때 문제가 발생

    • 스프링 빈을 수동으로 등록해서 해결할수도 있지만 자동 의존주입관계에서 해결할수있다.
  • 자동 의존주입관계에서 크게 3가지 방법이 있다

    • @Autowired 필드명 매칭

      • @Autowired 매칭 정리
        1. 타입 매칭
        2. 타입 매칭의 결과가 2개 이상일 때 "필드 명", "파라미터명" 으로 빈 이름 매칭
    • @Quilifier -> @Quilifier끼리 매칭 -> 빈 이름 매칭 (잘 사용 X)

      • @Quilifier는 빈 이름을 변경하는것은 아니다.
      • @Qualifier를 통해 추가 구분자를 해줌으로써 호출하여 사용할때 구분해준다.
      • 주입 받을때 모든 코드에 @Quilifier를 붙여줘야함(단점)
    • @Primary 사용 (자주 사용)

      • "우선 순위" 를 정하는 방법이다.

번외

@Qualifier(자세한) vs @Primary(넓은범위) = Primary는 넓은범위의 선택권이고, Qualifier은 좁은범위의 선택권이므로 Spring은 좁은 범위의 우선순위가 높다.

0개의 댓글