Exception
DI 모호성 에러
@Component("apple")
public class IPhone implements Phone {
@Autowired // 메모리의 자료형(타입)을 인지해서 주입해줌
// 주입대상 모호성 에러
///// @Qualifier("aw")
private Watch watch; // 의존 주입 대상(DI 대상
public IPhone() {
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");
}
*/
@Override
public void powerOn() {
this.watch.powerOn();
}
@Override
public void powerOff() {
this.watch.powerOff();
}
public Watch getWatch() {
return watch;
}
public void setWatch(Watch watch) {
this.watch = watch;
}
}
@Component("galaxy")
public class GalaxyPhone implements Phone {
@Autowired // 메모리의 자료형(타입)을 인지해서 주입해줌
///// @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();
}
public Watch getWatch() {
return watch;
}
public void setWatch(Watch watch) {
this.watch = watch;
}
}
두 객체 다
동일 이름의 Watch를 호출 하고 있음
Autowired는 메모리 자료형(타입)만을 구분해서 호출하기 때문에
어떤 Watch를 호출해야할지 모르는 것임
해결 방법으로는
@Qualifier을 사용할 수 있음
객체의 이름을 명시 해 어떤 Watch를 주입할 지 설정할 수 있음
.xml 의 bean 작성은 설정 파일이기 때문에 비용이 들지 않음
@어노테이션은 컴파일 해야하기 때문에 비용이 듦