작성
·
629
0
안녕하세요
빈 등록 관련하여 질문이 있습니다
컴포넌트 스캔 쪽을 공부하고 나서 생긴 의문인데요
MemberServiceImpl 클래스를 빈으로 등록하고자 할 때,
(수동등록)
@Configuration
public class AppConfig {
@Bean
public MemberService memberService(){
return new MemberServiceImpl(memberRepository());
}
(자동등록)
@Configuration
// 컴포넌트 스캔 시 AppConfig와 TestConfig 등 다른 설정 정보는 등록되지 않도록 하기 위함
@ComponentScan(
basePackages = "hello.core",
basePackageClasses = AutoAppConfig.class,
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {
}
@Component
public class MemberServiceImpl implements MemberService{
// MemberServiceImpl 구현 코드 ~
}
를 통하여 진행되는데요
이때 수동등록에서는 MemberServiceImpl 클래스 스프링 빈의 이름이
MemberServiceImpl을 생성하는 메서드 이름인 "memberService"이고,
자동등록에서는 클래스의 이름을 따서 "memberServiceImpl" 인 것을 확인했습니다
(수동등록 테스트)
public class ConfigurationSingletonTest {
@Test
void configurationTest() {
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class);
Assertions.assertThat(memberService).isInstanceOf(MemberService.class);
}
}
(자동등록 테스트)
public class AutoAppConfigTest {
@Test
void basicScan() {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);
MemberService memberService1 = ac.getBean("memberServiceImpl", MemberService.class);
Assertions.assertThat(memberService1).isInstanceOf(MemberService.class);
}
}
같은 스프링 빈이지만 등록 과정에 따라서 이렇게 이름이 차이가 나는 이유가 따로 있을까요??
그냥 스프링의 관습으로 이해하고 넘어가야할까요 ^^?
감사합니다~