본문 바로가기
Spring Boot

javax.inject.Provider 를 사용할 때 UnsatisfiedDependencyException 발생

by 오이가지아빠 2023. 3. 12.

#1. 오류 발생

PrototypeBean을 생성하려고 javax.injext.Provider를 사용하여 설정을 했을 때, 

 

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name '...': Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'javax.inject.Provider<...Class$...Bean>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

 

라는 오류가 발생하는 경우가 있다.

 

Prototype이 아닌 Singleton으로 생성할 때는 별 문제가 되지 않았는데... 왜 그럴까?

 

#2. 오류 해결

Spring Boot 2.X 에서 3.X 를 사용하면서 발생하는 문제였다.(정확히는 Spring Framework 6.0)

Spring Framework 6.0 Jsr330Factory의 createDependencyProvider 메소드는 javax.injectProvider를 구현하지 않고,

jakarta.injectProvider를 구현한다.

 

따라서, gradle이나 maven에서 javax.inject 대신 jakarta.inject-api를 의존성에 추가해주어야 한다.

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.0.2'
    id 'io.spring.dependency-management' version '1.1.0'
}

...

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'

    //implementation 'javax.inject:javax.inject:1'
    implementation 'jakarta.inject:jakarta.inject-api:2.0.1'
...
...

위처럼 Spring Boot 3.X에서 inject 의존성을 바꿔주면, 정상적으로 동작하는 것을 확인할 수 있다.

 

반응형

댓글