#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.inject의 Provider를 구현하지 않고,
jakarta.inject의 Provider를 구현한다.
따라서, 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 의존성을 바꿔주면, 정상적으로 동작하는 것을 확인할 수 있다.
'Spring Boot' 카테고리의 다른 글
[Spring Boot] REST API 제작기 - 2.DB연결(Mybatis) (0) | 2022.03.28 |
---|---|
[Spring Boot] REST API 제작기 - 1.프로젝트 생성 (0) | 2022.02.17 |
[Spring Boot] Spring Rest Doc 설정(gradle) (0) | 2021.06.03 |
댓글