
org.springframework.beans.factory.UnsatisfiedDependencyException 에러
의존성 주입(Dependency Injection) 과정에서 발생한다.
이 오류는 특정 빈(Bean)을 생성하기 위해 필요한 의존성을 찾을 수 없을 때 발생한다.
주요 원인
- 의존성 부족: 의존성을 주입하려는 빈이 해당 의존성을 제공하는 빈을 찾지 못할 때 발생한다. 예를 들어, 클래스의 생성자나 메서드에서 요구하는 빈이 없거나 올바르게 설정되지 않은 경우다.
- 이름 불일치: @Autowired 어노테이션을 사용할 때, 빈의 이름이 잘못되었거나 해당 이름의 빈이 존재하지 않는 경우에도 이 오류가 발생할 수 있다.
- 어노테이션 누락: @Component, @Service, @Repository 등의 어노테이션이 클래스에 누락되어 Spring 컨테이너가 해당 클래스를 빈으로 등록하지 못하는 경우다.
- 순환 의존성: 두 개 이상의 빈이 서로를 참조할 때 발생할 수 있으며, Spring이 빈을 생성할 수 없는 상황이 발생한다.
- XML 설정 오류: XML 설정 파일에서 빈 정의가 올바르지 않거나 누락된 경우에도 이 예외가 발생할 수 있다.
나같은 경우는 어노테이션 누락으로 인해 발생했다.
package test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component("samsung")
public class GalaxyPhone implements Phone {
@Autowired // DI == 의존주입
@Qualifier("gw")
private Watch watch;
public GalaxyPhone() {
System.out.println("갤럭시 객체 생성 01");
}
public GalaxyPhone(Watch watch) {
this.watch=watch;
System.out.println("갤럭시 객체 생성 02");
}
@Override
public void powerOn() {
this.watch.powerOn();
}
@Override
public void powerOff() {
this.watch.powerOff();
}
}
해결 방안
@Autowired는 타입을 기준으로 의존성을 주입하는데, 만약 여러 개의 동일한 타입이 존재하면 모호성 에러가 발생할 수 있다.
위 코드 외에도 여러개의 동일한 타입이 존재했기 때문에, 모호성으로 인해 에러가 발생한 것이다.
@Qualifier 삽입을 하면, 객체명도 참고를 해서 의존성을 주입하기 때문에,
@Qualifier 삽입으로 객체명도 참고해서 에러를 해결했다.
'에러일기' 카테고리의 다른 글
[Spring] org.springframework.beans.factory.BeanDefinitionStoreException 에러 (0) | 2024.10.08 |
---|---|
[Oracle 연동 오류] ORA-12541 데이터베이스에 접속할 수 없습니다. %s에 리스너가 없습니다. (0) | 2024.10.04 |
[Spring] org.springframework.beans.factory.NoSuchBeanDefinitionException 에러 (0) | 2024.10.01 |
[MySQL] Initializing database 설치 오류 (0) | 2024.10.01 |
[JSP] jakarta.el.PropertyNotFoundException 에러 (0) | 2024.09.12 |