@Configuration 질문드립니다.
84
2 asked
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
publicclass ImportSelectorTest {
@Test
void staticConfig() {
AnnotationConfigApplicationContext appContext = new AnnotationConfigApplicationContext(StaticConfig.class);
HelloBean bean = appContext.getBean(HelloBean.class);
assertThat(bean).isNotNull();
}
@Test
void selectConfig() {
AnnotationConfigApplicationContext appContext = new AnnotationConfigApplicationContext(SelectorConfig.class);
HelloBean bean = appContext.getBean(HelloBean.class);
assertThat(bean).isNotNull();
}
@Configuration
@Import(HelloConfig.class)
publicstaticclass StaticConfig {}
@Configuration
@Import(HelloImportSelector.class)
publicstaticclass SelectorConfig {}
}
안녕하세요. StaticConfig, SelectorConfig 클래스에 @Configuration 애노테이션은 어떤 모질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
public class ImportSelectorTest {
@Test
void staticConfig() {
AnnotationConfigApplicationContext appContext = new AnnotationConfigApplicationContext(StaticConfig.class);
HelloBean bean = appContext.getBean(HelloBean.class);
assertThat(bean).isNotNull();
}
@Test
void selectConfig() {
AnnotationConfigApplicationContext appContext = new AnnotationConfigApplicationContext(SelectorConfig.class);
HelloBean bean = appContext.getBean(HelloBean.class);
assertThat(bean).isNotNull();
}
@Configuration
@Import(HelloConfig.class)
public static class StaticConfig {}
@Configuration
@Import(HelloImportSelector.class)
public static class SelectorConfig {}
}
안녕하세요. StaticConfig, SelectorConfig 클래스에 @Configuration 애노테이션은 어떤 역할을 하나요? @Configuration 애노테이션을 주석 후 테스트를 해봤을 때 정상 동작하는 것까진 확인하였습니다.
Answer 2
1
안녕하세요. 펌킨푸딩님
다음과 같은 코드를 실행하면 해당 파일이 자동으로 스프링 빈으로 등록됩니다.
AnnotationConfigApplicationContext(StaticConfig.class);
따라서 별도의 설정이 없어도 @Import 기능을 사용할 수 있습니다.
그럼에도 불구하고 @Configuration을 사용하는 이유는 @Configuration이 붙으면 관례상 누구나 아~ 이 파일은 스프링 설정 파일이구나라고 쉽게 인식할 수 있기 때문입니다.
명시성: 이 클래스는 스프링 설정을 위한 클래스임을 명확하게 드러냅니다. (가독성 및 유지보수)
관례: 스프링 설정을 담당하는 클래스에는 @Configuration을 붙이는 것이 일반적인 관례입니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 펌킨푸딩님.
스프링에서 @Configuration은 클래스가 스프링 빈 정의를 포함하고 있다는 것을 나타냅니다. 이 어노테이션은 스프링 컨테이너에게 해당 클래스를 Java 기반의 설정 소스로 사용하라고 알려줍니다. 그러면 스프링 컨테이너는 해당 클래스의 @Bean 메서드를 찾아 빈을 등록합니다.
질문하신 StaticConfig와 SelectorConfig 클래스에서 @Configuration 어노테이션을 제거해도 테스트가 정상 동작하는 이유는, @Import 어노테이션 때문입니다. @Import는 다른 설정 클래스나 구성 요소를 현재 설정에 포함시키는 역할을 합니다. 이와 함께 AnnotationConfigApplicationContext는 클래스를 인자로 받아 스프링 컨텍스트를 설정하는 역할을 합니다.
@ImportSelector와 같은 기능을 사용하면, @Configuration 없이도 클래스를 컨텍스트에 포함시켜 설정할 수 있기 때문에, @Configuration 어노테이션이 없어도 설정 클래스가 스프링 컨테이너에 포함되어 동작하게 됩니다.
관련하여 추가 정보가 필요하시다면 아래의 링크들을 참고해보시기 바랍니다:
- @Import 어노테이션 사용 방법 : @Import의 역할과 사용 방법에 대한 설명을 제공합니다.
- @Configuration과 @Bean 개념 : @Configuration과 @Bean의 차이점 및 역할에 대한 상세한 설명이 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
보안이 엄격한 데이터
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
47
1
@Validated를 적용해도 빈 검증이 안되는 경우에 대한 조치 공유..
0
101
2
springboot에서 actuator없이 micrometer를 사용할수 있나요?
0
67
1
[공유] 터미널 말고 IDE 에서 jar 실행하기
0
100
1
localhost:8080/hello-servlet 404오류
0
123
2
내장톰캣2 서블릿 톰켓 실행이 안됩니다
1
154
2
최대 Tomcat 스레드 수를 확인하는 지표
0
159
1
mac m2에서 startup.sh 실행후 아무 반응이 없습니다.
0
94
2
내장 톰캣 실행 오류 관련 질문드립니다.
0
157
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
93
1
Thread Config Max 패널 설정 변경 질문
0
127
1
스프링 액츄에이터 shutdown 엔드포인트 활성화가 안됩니다.
0
107
1
테스트 실행시 동일 오류 3가지 발생
0
183
1

