본문 바로가기
오류리포트

[오류리포트] UnsatisfiedDependencyException

by ssunooo 2024. 10. 4.

 

 

UnsatisfiedDependencyException오류 발생 : 의존성 주입 모호성 오류

 

 

오류원인 서칭

watch타입

 

@Autowired를 통해 의존성 주입을 진행했지만 watch타입이 두개 이상 존재하므로 발생한 오류

 

@Qualifier 추가

 

@Qualifier는 id를 명시해주는 어노테이션으로

해당 어노테이션 사용하여 오류 해결

 

<해결 코드>

package test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component("apple")
public class ApplePhone implements Phone {
	@Autowired // 메모리의 자료형(타입)을 인지해서 주입해줌
	@Qualifier("aw")
	private Watch watch; // 멤버변수 초기화 = 생성자 // 워치에 의존성 주입을 해야한다. // DI 대상
	
//	private int num;
	
	public ApplePhone() {
//		this.watch = new AppleWatch();  // 개발자가 new를 직접 사용하기 때문에 사용x
		System.out.println("아이폰 객체 생성 01");
	}
	/*
	public IPhone(Watch watch) {
		this.watch = watch;
		System.out.println("아이폰 객체 생성 02");
	}
	
	public IPhone(Watch watch, int num) {
		this.watch = watch;
		this.num = num;
		System.out.println("아이폰 객체 생성 03");
	}
	*/
//	init-method="initMethod"를 bean에 추가
	
	@Override
	public void powerOn() { // 아이폰은 워치에 대해 의존성을 갖는다.
		this.watch.powerOn();
		System.out.println("아이폰 전원 ON");
	}

	@Override
	public void powerOff() {
		this.watch.powerOff();
		System.out.println("아이폰 전원 OFF");
	}
	
	
	// getter,setter는 코드 하단에 기입하는것이 일반적
	public Watch getWatch() {
		return watch;
	}

	public void setWatch(Watch watch) {
		this.watch = watch;
	}
	
	/*
	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}
	*/
	
	
}

 

 

 

2024.10.04