본문 바로가기
백엔드/SpringBoot

No qualifying bean 에러가 인터페이스에서 날 때

by 1005ptr 2023. 6. 19.
반응형
No qualifying bean of type 'IManager' available: expected single matching bean but found 2: managerA,IManager

 

클래스명은 바꿨는데 이런 에러가 발생했다.

현재 상황은 인터페이스 IManager가 있고 구현체 ManagerA, ManagerB가 있는 상황

Profile값에 따라서 ManagerA가 Bean 생성되고 주입되고 ManagerB가 주입되고 하는 식으로 설정해놨다.

MaangerA와 ManagerB는 정상적으로 Profile에 따라 주입이 선택되고 있는 것 같은데

문제는 원체 알수가 없는 인터페이스 이름을 가지는 Bean이 자꾸 생긴다는 것

 

저러길래 managerA도 Bean에서 빼고 IManager만 있는 상태로 실행해봤다.

Bean 초기화 단계에서 에러가 안나고 넘어가버린다.

이후에 실행해보면 문제가 생기는데 아이바티스 에러가 뜬다?

와 이거 대체 왜이런거지 이해가 안가는데

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): managerA.initialize

그래서 두 클래스 @Component에 IManager라고 동일하게 이름을 지정해줬다.(저 가짜 빈을 없애버리려고)

그러니까 profile 변경했을때 주입 변경 잘되고 문제가 없다.

@Component("iManager") ManagerA
@Component("iManager") ManagerB

 

이 인터페이스를 Mapper라고 인식한거 같은데 대체 왜 이런거지?

마이바티스를 쓰기는 쓰는데 @Mapper를 안달았는데 왜 이걸 Mapper로 인식한건지 의문이다.

반응형

댓글