[스프링] 스프링 빈 의존성 주입 어노테이션
@Autowired
- 타입 기반의 명시적 의존성 주입을 위한 어노테이션
@Autowired
어노테이션을 이용한 의존성 주입 시 동일한 타입의 빈이 하나 이상 정의되어 존재할 경우 스프링은 빈 주입 대상을 찾지 못하고 NoUniqueBeanDefinitionException
예외를 발생시킴
- 따라서 동일한 타입의 서로 다른 빈이 컴포넌트로 등록되었다면 스프링이 어떤 빈을 주입할지 결정해 주어야 함
- 빈 모호성 문제를 해결하기 위해 스프링의 기본 설정인 “이름을 이용한 자동 주입”을 사용할 수 있으며,
@Qualifier
또는 @Primary
어노테이션을 사용하여 동일한 타입으로 선언된 빈 중 어떤 빈을 변수에 주입할 것인지 결정할 수도 있음
- 이름을 이용한 자동 주입은 프로퍼티명(빈 이름) 기반으로 동작함
@Qualifier
- 동일한 타입의 서로 다른 빈이 정의되었을 경우 어떤 빈을 주입할 것인지 명시하는 어노테이션
- 의존성 주입 시 동일한 타입의 여러 빈들 중 스프링이 어떤 빈을 주입할 것인지 알려주는 역할을 수행함
@Component
어노테이션과 같이 사용하여 컴포넌트 등록 시 빈 이름을 지정한 후 의존성 주입 시 해당 이름을 사용
- 특정 빈 주입이 직접적으로 필요한 경우
@Qualifier
를 사용하여 구체적인 빈 주입을 명시할 수 있음
@Primary
를 통한 기본 빈 주입 설정 보다 우선함
@Primary
- 의존성 주입 시 빈 모호성 문제를 해결하기 위해 주입할 빈을 결정하는 또다른 어노테이션
@Qualifier
는 특정 빈의 이름을 지정하여 주입할 빈을 명시하는 반면, @Primary
는 동일한 타입의 빈 정의가 존재한다면 어떤 빈을 우선적으로(기본값으로) 주입할 지 명시하는 역할을 수행함
@Qualifer
로 특정 빈 주입을 명시하지 않는다면 @Primary
로 지정한 빈이 먼저 주입되어 사용됨
- 구성 클래스에서 빈 정의 시
@Primary
어노테이션을 지정하면 스프링은 해당 빈을 먼저 주입함
Comments