Java/Error

NoUniqueBeanDefinitionException 에러

담크 2021. 6. 22. 03:57

<bean>의 속성 중 autowire에서 byType을 사용했을 때 에러가 발생했다.

위를 실행했을 때 발생한 에러

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.test02.Food' available: expected single matching bean but found 2: favoriteFood,unFavoriteFood
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:220)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1358)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1501)
	... 13 more

이 에러의 뜻을 풀어보자면 <bean>이 유니크가 아니라서 예외가 발생했다. 라고 한다.

찾아보니 autowire의 byType속성은 해당 클래스의 setter의 parameterType과 같은 type의 bean이 있으면 자동할당된다고 나와있다.

 

위의 코드에서 <bean>이 찾는 class가 MyFood인데 MyFood에는 favoriteFood와 unFavoriteFood 이 2개의 파라미터가 있어서 어떻게 연결해야할지 모르겠다 라고 하는것이다.

 

이 경우에는 byType속성을 사용할 수 없으니 byName이나 다른속성을 사용하여 값을 찾아준다.

byName 속성을 사용했더니 값이 잘 나오는 것을 알 수 있다.