BackEnd 학습/Spring Framework

Spring(스프링) - 의존관계 자동 주입

잉아당 2023. 3. 26. 22:34
728x90

다양한 의존관계 주입 방법

  • 생성자 주입
    • 생성자를 통해서 의존관계를 주입
    • 생성자 호출시점에 딱 1번만 호출되는 것이 보장
    • 불변과 필수 의존관계에 사용
    • 생성자가 1개만 존재하면 @Autowired를 생략해도 자동 주입이 됨(스프링 빈만 해당)
  • setter 주입
    • setter 메서드를 통해서 의존관계를 주입
    • 선택, 변경 가능성이 있는 의존관계에 사용
    • 주입대상이 없을 경우에 대비하여 @Autowired(required = false)로 지정
  • 필드 주입
    • 필드에 바로 의존관계를 주입
    • 외부에서 변경하기 어렵기 때문이 추천하지 않는 방식
    => 테스트하기 어려움
  • 일반 메서드 주입
    • 일반 메서드를 통해서 주입 받을 수 있음
    • 잘 사용하지 않음

옵션처리

  • 자동주입 대상 옵션처리
    • @Autowired(required=false) : 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출이 안됨
    • @Nullable : 자동 주입할 대상이 없으면 null이 입력됨
    • Optional<> : 자동 주입할 대상이 없으면 Optional.empty가 입력

생성자 주입 선택

  • 불변
    • 의존관계 주입은 변경할 일이 없음 -> 생성자 주입 선택
    • 수정자 주입은 public으로 되어져 있고 누군가 수정할 위험이 있음
  • 누락
    • final 키워드를 이용해 생성자 주입시 누락을 방지할 수 있음

롬복과 최신 트렌드

  • 어노테이션을 이용하여 getter, setter, 생성자 등 직접 입력하지 않아도 어노테이션만 작성하면 자동으로 생성해 줌
  • => 라이브러리 추가 필요

조회할 빈이 2개일 경우

  • @Autowired는 타입으로 조회함
    • 같은 타입이 있을 경우 문제가 발생

@Autowired 필드명, @Quilifier, @Primary

  • 조회할 빈이 2개 이상일 때 해결 방법
    • @Autowired 필드명 매칭
    • @Quilifier
    • @Primary 사용
  • @Autowired 필드명 매칭
    • 여러 빈이 존재하면 필드 이름, 파라미터 이름으로 빈 이름을 추가 매칭함
    • 먼저 타입 매칭을 시도한 후 여러 빈이 있을 때 추가로 동작
  • @Quilifier 사용
    • 추가 구분자를 붙여주는 방법
    • @Quilifier를 못 찾을 경우 해당 이름의 빈을 추가로 찾음
    • 빈 이름을 변경하는 것이 아니고 @Quilifier를 찾는 용도
  • @Primary 사용
    • 우선 순위를 정하는 방법
    • @Autowired시에 여러 빈이 매칭되면 @Primary가 우선권을 가짐
  • @Primary를 이용해 주로 사용하는 빈을 지정하고 자주 사용하지 않은 빈을 사용할 때 직접 지정하거나 @Quilifier를 이용해 사용할 수 있도록 함
  • @Quilifier가 @Primary보다 우선 순위 높음
    • 항상 스프링은 자세한것이 간단한 것보다 우선 순위가 높음

애노테이션 직접 만들기

  • 애노테이션은 상속이라는 개념이 없음
  • 애노테이션을 모아서 사용 가능

자동, 수동의 올바른 실무 운영 기준

  • 자동을 기본으로 사용
  • 스프링 부트는 컴포넌트 스캔을 기본으로 사용
  • 업무 로직 빈, 기술 지원 빈
    • 업무 로직 빈
      • 웹을 지원하는 컨트롤러, 핵심 비즈니스 로직이 있는 서비스, 데이터 계층의 로직을 처리하는 리포지토리 등이 모두 업무 로직 임
      • 비즈니스 요구사항을 개발할 때 추가되거나 변경 됨
      • 자동 빈 등록을 사용하는 것이 좋음
    • 기술 지원 빈
      • 기술적인 문제나 AOP(공통 관심사)를 처리할 때 주로 사용
      • 데이터베이스 연결이나, 공통 로그 처리 처럼 업무 로직을 지원하기 위한 하부 기술이나 공통 기술 임
      • 수동 빈 등록을 사용하는 것이 좋음
  • 수동 빈 등록 사용할 때
    • 광범위하게 영향을 미치는 기술 지원 빈에 사용하는 것이 좋음
    • ⇒ 설정 정보에 바로 확인 가능
    • 비즈니스 로직 중 다형성을 많이 활용할 때
    • ⇒ 유지보수 하기 편함

 

 

출처 : 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