inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 부트 - 핵심 원리와 활용

자동 구성 이해2 - ImportSelector

내부 클래스 static 안할 시 오류

95

nick

작성한 질문수 38

0

[ImportSelectorTest 시 StaticConfig 내부 클래스 static 사용이유]
안녕하세요. 테스트할 때 StaticConfig 내부 클래스에 static 키워드를 붙이지 않고 테스트를 하니 아래와 같은 오류가 발생하는데요. 이유가 무엇인가요?

Error creating bean with name 'importSelectorTest.StaticConfig': Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.selector.ImportSelectorTest' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'importSelectorTest.StaticConfig': Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.selector.ImportSelectorTest' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

spring spring-boot prometheus grafana

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

H N님께서 질문하신 내용은 내부 클래스에 static 키워드가 필요한 이유에 관한 것입니다. static 키워드를 붙이지 않을 경우 발생하는 오류에 대해서 설명드리겠습니다.

스프링 프레임워크에서 내부 클래스(Inner Class)를 사용하여 설정 클래스를 정의할 때, 해당 클래스에 static을 선언하지 않으면 외부 클래스의 인스턴스가 생성되어야만 내부 클래스의 인스턴스를 생성할 수 있게 됩니다. 때문에, 스프링 컨테이너는 해당 클래스를 독립적인 Bean으로 등록하지 못하게 되는 것입니다.

이와 같은 상황에서 내부 클래스에 static을 선언하지 않으면 다음과 같은 문제가 발생합니다:
- 스프링 컨테이너가 빈을 생성할 때 필요한 외부 클래스의 인스턴스를 자동으로 생성하지 않고, 직접적인 참조를 필요로 하게 되어 UnsatisfiedDependencyException 오류가 발생합니다.

이 문제를 해결하기 위해서는 내부 클래스를 static으로 선언하여 외부 클래스의 인스턴스가 없어도 독립적으로 사용할 수 있도록 하여야 합니다. 이렇게 하면 스프링 컨테이너가 내부 클래스를 빈으로 등록하고 관리할 수 있습니다.

아래 링크를 참고하여 해당 개념에 대한 더 자세한 설명을 확인해보세요:
- TestConfig 클래스에서 static을 떼버리면 오류가 나는 이유

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

보안이 엄격한 데이터

0

73

1

MyProperties 자체를 클라이언트 코드에서 사용

1

43

1

http://localhost:8080/actuator/prometheus

0

85

3

jar 추가에대한 질문드려도될까요?

0

64

1

build.gradle bom link 변경

0

65

2

@Counted 초기화

0

48

1

@Validated를 적용해도 빈 검증이 안되는 경우에 대한 조치 공유..

0

101

2

springboot에서 actuator없이 micrometer를 사용할수 있나요?

0

67

1

@Configuration 질문드립니다.

0

84

2

[공유] 터미널 말고 IDE 에서 jar 실행하기

0

101

1

localhost:8080/hello-servlet 404오류

0

123

2

내장톰캣2 서블릿 톰켓 실행이 안됩니다

1

154

2

최대 Tomcat 스레드 수를 확인하는 지표

0

160

1

mac m2에서 startup.sh 실행후 아무 반응이 없습니다.

0

94

2

내장 톰캣 실행 오류 관련 질문드립니다.

0

158

1

스프링 발전 과정들도 자세히 알아둬야하나요??

1

127

1

스프링부트 ioc 컨테이너 갯수

0

89

1

404 페이지

0

133

3

actuator 호출시 타임스탬프 질문

0

90

1

순수 라이브러리 사용하기 2 - memory-v1

0

125

1

외부설정 @ConfigurationProperties의 내부 클래스에서 static을 사용하는 이유를 알고 싶습니다.

0

105

1

서블릿 컨테이너 초기화1 강의 관련 질문입니다~

0

94

1

Thread Config Max 패널 설정 변경 질문

0

128

1

스프링 액츄에이터 shutdown 엔드포인트 활성화가 안됩니다.

0

108

1