오류 내용

프로젝트 실행시 다음과 같은 에러가 발생했다.

이는 한 필드에 하나의 값이 할당되어야 하는데, 해당 타입이 여러개라 의존성 주입이 제대로 되지 않아 발생한 에러이다.

 

 

발생 원인

에러가 난 부분을 보면,

 

현재 Controller 내에서 Service 빈이 제대로 주입되지 않는다.

바보 같이 구현체(TempQueryServiceImpl)를 가지고 와야하는데 인터페이스(TempQueryService)를 적어버렸다 .. ^^

TempQueryService를 상속한 TempQueryServiceImpl를 적지 않고 TempQueryService를 적으니, 빨간 줄이 그어졌는데 인텔리제이에서 @Qualifier 어노테이션을 적용해서 수정하라고 띄워준다.

 

해결방법

나처럼 오탈자로 간단하게 해결하는 경우 외에, 인터페이스 및 구현체로 인하여 제대로 된 의존성 주입이 되지 않을 때의 해결법이다. 대표적으로 @Qualifier, @Primary 어노테이션을 통해 클래스를 지정할 수 있다. 

 

@Qualifier 어노테이션의 경우 인터페이스를 상속한 클래스가 여러 개일 때 해당 어노테이션에 클래스명을 기입하여 멤버변수에 의존성을 주입해준다.

@Qualifier("클래스명")
private MyInterface myInterface;

 

 

혹은 생성자 인자에 의존성을 주입할 수도 있다.

private MyInterface myInterface;

@Autowired
public 생성자(@Qualifier("클래스명") MyInterface myInterface) {
    this.myInterface = myInterface;
}

 

정리내용

오타로 발생한 이슈,, 였지만 인터페이스 & 구현체를 바탕으로 MVC 모델 구축하는 것이 아직 어색하다. 많이 활용하면서 객체지향의 참맛을 익혀야쥐

 

+ Recent posts