ception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'memberxx' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory
등 이렇게 AutoWired를 자동주입 할 수 없다고 뜨는 경우가 있습니다.
이런 경우에는 몇 가지 문제점이 있습니다.
1.AutoWired를 할 필드 객체나 클래스등이 스프링 빈에 등록이 되어있지 않을 때
AutoWired 자동 주입을 하기 위해서는 AutoWired를 하기위한 필드 객체나
오토와이어드를 자동주입 하기위한 클래스 등이 누락되면 자동주입을 할 수 없게 됩니다.
AutoWired를 하기위해선 오토와이어드를 선언한 클래스 , 오토와이어드를 할 객체 등이 스프링빈에 등록되어 있어야 합니다.
※어노테이션이 잘 붙어있는지 확인 하자
2.인텔리제이 호환오류
만약 컴포넌트와 클래스등이 정상적으로 어노테이션이 붙어있음에도 오류가 뜬다면
build나 호환 문제 입니다.
저도 이 부분에 해당했는데
첫번째 스프링 버전을 2.6.7로 낮춘다.
3.0 버전부터는 제 컴퓨터와 호환이 잘 되지 않더군요 그래서 버전을 낮추니 정상적으로 자동주입이 되는걸 확인 할 수 있었습니다.
build가 잘못 되었을때
build를 인텔리제이 -> gradle로 변경
Ctrl + Alt + Shift 를 눌러 설정 정보를 킵니다
검색창에 gradle를 검색하여 빌드 실행을 인텔리제이 -> gradle로 변경하고
인텔리제이를 껏다가 키시면 됩니다!!
세번째
컴포넌트 스캔 범위 최소화
컨테이너에서 꺼낼 때 설정정보를 넣어서 꺼낸다고 가정했을때
CompoentScan(컴포넌트 스캔)부분을 basePackages를 사용해 탐색범위를 줄입니다
basePackages는 탐색범위를 패키지 단위로 하는 것을 말하는데
컴포넌트 스캔은 디폴트값 일시 모든 자바 패키지를 찾아서 컴포넌트가 붙은 어노테이션을 찾아
스프링을 등록 시킵니다. 그렇기 때문에 오류가 나는 경우도 종종 있어(거의 없음)
만약 저 위 두 개의 방법이 되지 않는다면 자신이 스캔할 패키지만 범위로 지정해서 넣어주시면 됩니다.
만약 이것도 안된다면 댓글로 알려주세요~!!
'[자바] 스프링 오류' 카테고리의 다른 글
could not resolve root entity 'item' , Entity클래스를 못찾을때 (1) | 2023.05.02 |
---|---|
MySQL MyBatis 오류 (1) | 2023.04.29 |