인프런 커뮤니티 질문&답변
@Configuration 질문드립니다.
작성
·
21
0
[질문 템플릿]
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 애노테이션을 주석 후 테스트를 해봤을 때 정상 동작하는 것까진 확인하였습니다.
답변 2
0
안녕하세요. 펌킨푸딩님
다음과 같은 코드를 실행하면 해당 파일이 자동으로 스프링 빈으로 등록됩니다.
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의 차이점 및 역할에 대한 상세한 설명이 있습니다.
 
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






