이 문서의 내용
테스트 환경 및 주요 아젠다
더보기
이 프로젝트의 개발 환경
- 개발 언어 및 환경
- OpenJDK 12
- Spring: spring-context 5.0.2.RELEASE
- Gradle 7.3
특정 Bean 객체에 엑세스하면 NoSuchBeanDefinitionException: No bean named '<Bean 이름>' available 오류가 발생합니다.
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '<Bean 이름>' available
Bean은 컴포넌트 스캔을 사용해 자동 등록하고 있습니다.
Step 1: ApplicationContext에서 등록된 Bean 확인
getBeanDefinitionNames()을 사용하면 ApplicationContext에 등록된 Bean 이름을 확인 할 수 있습니다.
/**
* Return the names of all beans defined in this factory.
* <p>Does not consider any hierarchy this factory may participate in,
* and ignores any singleton beans that have been registered by
* other means than bean definitions.
* @return the names of all beans defined in this factory,
* or an empty array if none defined
*/
String[] getBeanDefinitionNames();
문제의 Bean 객체가 실제로 Bean에 등록되지 않았습니다.
Bean에 등록되어 있다면 엑세스 코드에서 Bean 이름을 잘못 등록했는지 확인합니다.Bean에 등록되어 있지 않다면 Bean 등록 코드를 확인합니다.
문제의 Bean 클래스에서 @Component 대신 @ComponentScan이 등록되어 있습니다.
코드 스니펫에서 자동 입력된 것으로 보이며, @Component으로 수정하니 정상 동작합니다.
@ComponentScan
public class XXX
{
}
Bean 타입을 잘못 지정했을 때 오류
Bean 객체에 엑세스 할 때 Bean 타입을 잘못 지정하면 다음 오류가 발생합니다.
Bean named '<Bean 이름>' is expected to be of type '<타입 이름>' but was actually of type '<타입 이름>' 오류
엑세스하는 Bean 타입과 할당하는 변수의 타입이 일치시킵니다.
엑세스 하는 Bean이 모호할 때
Bean 객체에 엑세스 할 때 어떤 Bean을 리턴해야하는지 모호하면 다음 오류가 발생합니다. 동일한 타입에 대해서 여러 개의 Bean이 등록되어 있습니다.
No qualifying bean of type '<Bean 타입>' available: expected single matching bean but found '<Bean 개수>': '<Bean 이름>, <Bean 이름>, ...'
동일한 Bean 타입에 대해서 Bean 이름을 구분하여 등록합니다.
Bean 객체에 엑세스 할 때는 Bean 타입과 Bean 이름을 함께 사용합니다.
'Java > Spring' 카테고리의 다른 글
Spring 5 입문: Chapter 07. AOP 프로그래밍(Aspect Oriented Programming) (0) | 2023.11.30 |
---|---|
Spring 5 입문: Chapter 06. Bean 라이프사이클과 범위 (0) | 2023.11.28 |
Spring 5 입문: Chapter 05.컴포넌트 스캔 (0) | 2023.11.28 |
자동 의존 주입을 위한 @Autowired @Resource @Inject 차이 (0) | 2023.11.27 |
Spring 5 입문: Chapter 04. 자동 의존 주입 (0) | 2023.11.27 |