728x90
회사에 입사 후 처음으로 Spring Framework를 알게 되었고, 그 이후로도 제대로 Spring Framework를 공부한 적 없는 나에게는 가끔 이런 문제 같지도 않은 문제를 만나게 된다.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '클래스명': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private 클래스경로; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [클래스명] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} |
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [클래스명] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} |
의존성 주입을 위해 @Autowired를 사용했을 때 해당 bean을 찾을 수 없다는 에러다.
@Autowired를 사용하기 위해서는 bean이 등록되어있어야 하는데 나는 해당 설정을 하나도 건들지 않고 뜬금없는 경로에 생성한 클래스를 @Autowired로 주입하려고 하니 위의 에러가 발생한 것이다.
처음에는 단순하게 @Component나 @Service 어노테이션을 주면 ComponentScan이 자동으로 되는 줄 알았는데 @ComponentScan 어노테이션을 이용한 뭔가를 설정해줘야 하는 것 같았다.
이에 해당하는 부분은 다음에 자세하게 찾아봐야 할 것 같다.
회사에서 사용하는 프로젝트는 xml 파일에 <context:component-scan>에 경로가 지정되어 있었다. xml에 bean을 직접 추가하거나 해도 되지만 xml은 최대한 건들지 않기 위해 설정된 경로에 해당 클래스를 옮겨주는 것으로 @Autowired 사용 시 발생하는 문제를 해결할 수 있었다.
여담이지만 찾아보는 과정에서 @Autowired를 사용하는 것보다 생성자 주입 방식을 사용하는 것이 더 안전하다는 내용을 보았다.
아무래도 Spring Framework를 공부해야 할 때가 다가온 것 같다.
728x90
'Web > Spring' 카테고리의 다른 글
[Spring] Thead간 SecurityContextHolder 공유하기 (0) | 2022.07.13 |
---|---|
[Spring] static 필드에 @Autowired(의존성 주입) 사용하기 (0) | 2021.09.29 |
[Spring Boot] Spring Boot 실행 포트(Port) 변경하기 (0) | 2021.09.03 |