[스프링] 스프링 빈 의존성 주입 어노테이션

@Autowired

  • 타입 기반의 명시적 의존성 주입을 위한 어노테이션
  • @Autowired 어노테이션을 이용한 의존성 주입 시 동일한 타입의 빈이 하나 이상 정의되어 존재할 경우 스프링은 빈 주입 대상을 찾지 못하고 NoUniqueBeanDefinitionException 예외를 발생시킴
  • 따라서 동일한 타입의 서로 다른 빈이 컴포넌트로 등록되었다면 스프링이 어떤 빈을 주입할지 결정해 주어야 함
  • 빈 모호성 문제를 해결하기 위해 스프링의 기본 설정인 “이름을 이용한 자동 주입”을 사용할 수 있으며, @Qualifier 또는 @Primary 어노테이션을 사용하여 동일한 타입으로 선언된 빈 중 어떤 빈을 변수에 주입할 것인지 결정할 수도 있음
  • 이름을 이용한 자동 주입은 프로퍼티명(빈 이름) 기반으로 동작함

@Qualifier

  • 동일한 타입의 서로 다른 빈이 정의되었을 경우 어떤 빈을 주입할 것인지 명시하는 어노테이션
  • 의존성 주입 시 동일한 타입의 여러 빈들 중 스프링이 어떤 빈을 주입할 것인지 알려주는 역할을 수행함
  • @Component 어노테이션과 같이 사용하여 컴포넌트 등록 시 빈 이름을 지정한 후 의존성 주입 시 해당 이름을 사용
  • 특정 빈 주입이 직접적으로 필요한 경우 @Qualifier를 사용하여 구체적인 빈 주입을 명시할 수 있음
  • @Primary를 통한 기본 빈 주입 설정 보다 우선함

@Primary

  • 의존성 주입 시 빈 모호성 문제를 해결하기 위해 주입할 빈을 결정하는 또다른 어노테이션
  • @Qualifier는 특정 빈의 이름을 지정하여 주입할 빈을 명시하는 반면, @Primary는 동일한 타입의 빈 정의가 존재한다면 어떤 빈을 우선적으로(기본값으로) 주입할 지 명시하는 역할을 수행함
  • @Qualifer로 특정 빈 주입을 명시하지 않는다면 @Primary로 지정한 빈이 먼저 주입되어 사용됨
  • 구성 클래스에서 빈 정의 시 @Primary 어노테이션을 지정하면 스프링은 해당 빈을 먼저 주입함

Comments